我试图通过system
(或使用反引号)从ruby运行命令,但遇到了问题。当我尝试调用命令时,shell无法找到它,即使我知道如果我直接调用它也可以。例如:
`zip`
>> sh: zip: command not found
问题似乎是ruby正在使用sh
shell,其中$PATH
未正确设置,而不是bash
,我不确定原因。我的应用程序运行的用户默认设置为使用bash
。
有没有办法告诉红宝石使用bash
代替sh
?
答案 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可执行文件的完整路径。