如何使Ruby与bash兼容

时间:2019-05-15 23:27:46

标签: ruby-on-rails ruby linux bash shell

我有一个ruby脚本,它使用open3从脚本内部运行shell命令,并且我正在使用Ubuntu 18.04和bash。

当我运行该脚本时,它会产生诸如0: sh: 2: pushd: not found之类的错误。我搜索了一下,发现一件事是https://stackoverflow.com/a/17044484/5553963,提示我们使用ENV["SHELL"] = "/bin/bash",但是当我检查环境变量时,我已经知道了:

$ printenv "SHELL"
/bin/bash

如何使此脚本在我的计算机上运行?

该脚本的第一部分:

#!/usr/bin/env ruby

require 'open3'

def run(i, cmd)
    res = ""
    Open3.popen3(cmd) do |stdin, stdout, stderr, thread|

我的红宝石版本:ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]

1 个答案:

答案 0 :(得分:5)

假设您需要内置的pushd外壳程序,则需要在系统命令中显式调用bash,因为ruby不引用$ SHELL变量。像这样:

Open3.popen3("bash -c '#{cmd}'")

应该可以解决问题。