我有一个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]
答案 0 :(得分:5)
假设您需要内置的pushd
外壳程序,则需要在系统命令中显式调用bash,因为ruby不引用$ SHELL变量。像这样:
Open3.popen3("bash -c '#{cmd}'")
应该可以解决问题。