如何在Ruby中运行bash命令?

时间:2015-08-04 02:26:10

标签: ruby-on-rails bash shell scripting

我在Ruby中有一个脚本,里面必须运行bash命令。此命令是export http_proxy = ""export https_proxy = ""

问题是我在没有运行错误的情况下运行以下操作,但似乎没有做任何更改:

system "export http_proxy=''"
system "export https_proxy=''"

我使用这些行创建了file.sh,如果我在终端中运行它,则只有在运行时才有效:source file.sh. file.sh

请问您如何在Ruby脚本中运行此命令?它可以直接使用命令行或在脚本中执行.sh文件。

2 个答案:

答案 0 :(得分:1)

使用system运行单独的流程时,对该流程的环境所做的任何更改都只会影响该流程,并且会在流程退出时消失。

这正是为什么运行file.sh不会更改当前shell,因为它将其作为子shell运行,并且当进程退出时更改消失。

正如您已经发现的那样,使用source.运行 deoes 会影响当前的shell但是因为它运行的脚本不是一个子shell,但在当前 shell的上下文中。

如果要更改当前Ruby脚本的环境变量,应该查看ENV,例如:

ENV["http_proxy"]  = ""
ENV["https_proxy"] = ""

答案 1 :(得分:0)

%x( echo 'hi' )

并捕获变量

中的标准输出
var = %x( echo 'hi' )