【发布时间】:2014-03-29 15:28:58
【问题描述】:
我有一系列 bash 文件,我想将它们导入当前的 Ruby 环境。这是一个例子:
$ echo "export FOO=bar" > foo.sh
$ irb
> `source $(pwd)/foo.sh`
> puts ENV['FOO']
=> nil
有没有办法将foo.sh 导入父环境而无需手动解析它?
【问题讨论】:
-
不,你不能,子进程不能改变其父进程的环境。
source命令在子进程中执行,因此您不能使用它来更改当前进程的环境。 -
不,您需要解析
foo.sh。请参阅this answer 了解更多操作方法。 -
虽然@toro2k 是正确的,但如果您获取文件,然后将其他命令链接在一起,例如
system "source some_sh_file.sh && my_func_in_some_sh_file #{arg}",您可以访问它。这看起来相当不方便,但您可以包装系统调用并将其放在命令之前的源声明之前。 -
看来这是个不错的方法:stackoverflow.com/questions/2139080/…发帖前没看到。
标签: ruby bash environment-variables