我是红宝石的新手。还在学习它。
我有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之外是否有任何脚本选项可以帮助我做到这一点?
我感谢您阅读这篇文章并帮助我的时间。 : - )
答案 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