将ruby变量导出到父进程

时间:2014-07-10 07:43:14

标签: python ruby linux bash environment

我是红宝石的新手。还在学习它。

我有bash脚本和ruby脚本,有独立的责任。

bash脚本使用一些命令行参数调用ruby脚本。解析这些命令行参数后,ruby脚本将设置/取消设置一些局部变量。这些变量在父bash脚本中具有相同的用法/名称。

所以,我需要让ruby脚本中变量的修改值也反映在父bash脚本中。

我想到的几种方法是:

1。)在bash中将变量导出到环境中,然后让ruby使用ENV[]哈希修改它们。在这种情况下,不需要在ruby中存储局部变量来存储这些值,ruby会直接修改bash中导入的变量,因为它们是环境变量。但是,这些更改的环境值是否会反映在bash脚本中?

2.。)在ruby脚本返回到父bash脚本之后,调用一些ruby方法,它将返回一个变量的值。因此,对于每个变量,都会调用一个方法。像python这样的东西,

python -c 'import python_module; print python_method()'

红宝石可以吗?

如果以上两种方法都不可能,还有其他方法可以将ruby变量的值反映回父bash脚本吗?

或者,除了ruby / python之外是否有任何脚本选项可以帮助我做到这一点?

我感谢您阅读这篇文章并帮助我的时间。 : - )

1 个答案:

答案 0 :(得分:1)

最简单的机制类似于ssh-agent程序使用的机制。

让您的程序输出一组环境导出语句,如

export THIS=something
export THAT=something_else

然后将调用脚本eval作为结果,如

eval `my_program`

这将导致shell合并您的环境变量。例如,这是一个小型Python程序。

print "export THIS=something"
print "export THAT='something else'"

当我运行它时,它会输出两个导出语句:

airhead:Python sholden$ python stackoflo.20140710-1.py
export THIS=something
export THAT='something else'

因此,当我评估结果时,导出语句由调用shell执行:

airhead:Python sholden$ eval `python stackoflo.20140710-1.py`

其集合的变量现在是环境的一部分:

airhead:Python sholden$ echo $THIS
something
airhead:Python sholden$ echo $THAT
something else

最后,这里证明了这些值会进入shell的环境:子shell会看到它们。

airhead:Python sholden$ bash
bash-3.2$ echo $THIS
something