我试图通过下面提到的 3 种方法在 ruby 代码中设置一个环境变量。像这样:
one = `setenv HEMANT2 \"hi\"`
two = %x[ export HEMANT2=hi1]
there = system("setenv HEMANT \"hi\"")
这 3 个似乎都不起作用。我正在研究 tcsh。想知道我错过了什么吗?
最佳答案
环境变量属于一个进程并被传递给他们的 child 。上面的所有行都创建了一个子 shell 进程。环境变量在子 shell 进程中更改,而不是在其父 Ruby 进程中更改。
相反,使用 ENV
class .
ENV['HEMANT2'] = 'hi'
这将在您的 Ruby 进程中设置 HEMANT2
环境变量。但它不会更改您的 shell 中的环境变量。
$ cat ~/tmp/test.rb
ENV['HEMANT2'] = 'hi'
$ ruby ~/tmp/test.rb
$ echo $HEMANT2
$
同样,因为环境变量属于一个进程,并由其子进程继承。 ruby ~/tmp/test.rb
fork 一个你的 shell 的子进程。它不能设置其父级的环境变量。
您可以使用 shell 脚本来完成,但前提是您源
它。 source
不会创建子进程,它会在您的 shell 中运行命令。
$ cat test.sh
#!/bin/sh
HEMANT2=hi
$ sh test.sh
$ echo $HEMANT2
$ source test.sh
$ echo $HEMANT2
hi
这仅适用于为您的 shell 编写的 shell 脚本。
关于ruby - 如何在 ruby 代码中执行 setenv 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64641827/