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

Dan*_*uis 9 ruby bash shell

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

`zip`
>> sh: zip: command not found
Run Code Online (Sandbox Code Playgroud)

问题似乎是ruby正在使用shshell,其中$PATH没有正确设置,而不是bash,我不知道为什么.我的应用程序运行的用户bash默认设置为使用.

有没有办法告诉红宝石使用bash而不是sh

sep*_*p2k 9

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

`bash -c zip`
Run Code Online (Sandbox Code Playgroud)

要么

`#{ ENV['SHELL'] } -c zip`
Run Code Online (Sandbox Code Playgroud)

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

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


Cor*_*ook 0

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

  • 像 whereis 这样的命令应该始终位于路径中。或所有发行版中的常见位置 /usr/bin/whereis 这可能是查找可能分散的垃圾箱的好解决方案。 (2认同)