gpt4 book ai didi

python - 将 ruby​​ 变量导出到父进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:18 24 4
gpt4 key购买 nike

我是 ruby 新手。还在学习中。

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

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

因此,我需要将 ruby​​ 脚本中变量的修改值也反射(reflect)在父 bash 脚本中。

我想到的几种方法是:

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

2.) ruby​​ 脚本返回到父 bash 脚本后,调用 ruby​​ 的一些方法,这些方法将 a 变量的值返回给它。因此,对于每个变量,都会调用一个方法。类似于 python,

python -c 'import python_module;打印 python_method()'

这在 ruby​​ 中可能吗?

如果以上两种都不可行,是否有任何其他方法可以将 ruby​​ 变量的值反射(reflect)回父 bash 脚本?

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

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

最佳答案

最简单的机制类似于 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

关于python - 将 ruby​​ 变量导出到父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24671014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com