每个进程拥有自己的一组环境变量
每个程序都至少有一个进程,每个进程有一组环境变量。环境变量随着进程关闭而消失,当你重新打开一个 shell 时,之前设置的环境变量就不存在了
子进程继承父进程的环境变量
每个程序都由其他程序开启。例如在 shell 中启动 irb 会话,shell 就是 irb 的父进程。 子进程可以获得父进程环境变量的副本,但是子进程无法修改父进程的环境变量。
$ export TEST_ENV=test
$ irb
> puts ENV['TEST_ENV']
> "test"
> puts ENV['PATH']
> ""/Users/admin/.nvm/..."
irb 会话是 shell 的子进程,获得了 shell 的一组环境变量,其中就包括刚刚设置的TEST_ENV
父进程可以控制传给子进程的环境变量
$ TEMP_ENV=test ruby -e "puts ENV['TEST_ENV']"
=> test
$ echo TEMP_ENV
=> # nothing...
shell 的 local variable 与环境变量的不同
local variable 跟环境变量很像,导致小白很容易搞混。local variable 跟环境变量最显著不同点就是 local variable 不会传给子进程。
$ TEST_ENV=test # 设置 local variable
$ ruby -e "puts ENV['TEST_ENV']"
=> # 无返回
$ export TEST_ENV # 设置环境变量
$ ruby -e "puts ENV['TEST_ENV']"
=> test
有错误之处,希望大家指正、评论。
参考文章:http://blog.honeybadger.io/ruby-guide-environment-variables/
网友评论