ruby - 如何在 ruby​​ 代码中执行 setenv 命令

标签 ruby

我试图通过下面提到的 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/

相关文章:

ruby-on-rails - Ruby:如何从包含模块的类中访问常量

ruby-on-rails - 如何在没有 Rake 的情况下运行完整的 MiniTest 套件?

ruby-on-rails - Rails sqlite3 上的段错误

ruby-on-rails - Arel 聚合、计数、外部连接?

ruby - 在 ruby​​ 中使用什么函数来模拟 for

ruby-on-rails - 如何将设计身份验证详细信息传递给 Rails Controller 操作?

ruby-on-rails - wicked_pdf 和 wkhtmltopdf 从包含大量 Javascript 内容的文件生成 PDF?

mysql - 无法在 Windows 上安装 mysql2 for Rails 3

ruby-on-rails - 销毁管理 session 导致 http get 请求 rails 4

python - 将带有yield语句的Ruby循环迭代转换为Python