如何指定用于ruby系统调用的shell?

时间:2009-08-06 15:04:58

标签: ruby bash shell

我试图通过system(或使用反引号)从ruby运行命令,但遇到了问题。当我尝试调用命令时,shell无法找到它,即使我知道如果我直接调用它也可以。例如:

`zip`
>> sh: zip: command not found

问题似乎是ruby正在使用sh shell,其中$PATH未正确设置,而不是bash,我不确定原因。我的应用程序运行的用户默认设置为使用bash

有没有办法告诉红宝石使用bash代替sh

3 个答案:

答案 0 :(得分:9)

据我所知,唯一的方法是显式调用shell,例如

`bash -c zip`

`#{ ENV['SHELL'] } -c zip`

或使用系统:system("bash", "-c", command)

然而,ruby(以及ruby生成的所有进程)应该继承父进程的环境,因此即使使用另一个shell也可以正确设置$ PATH。你是否可以从cron作业或init脚本等运行ruby,其中PATH没有正确设置?

答案 1 :(得分:4)

我猜测Ruby使用system() C函数,它使用/bin/sh。在大多数系统中,/bin/sh只是其他shell的符号链接,因此您可以更改为您想要的任何内容

答案 2 :(得分:0)

为什么不指定zip可执行文件的完整路径。