代码之家  ›  专栏  ›  技术社区  ›  Daniel Vandersluis

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

  •  9
  • Daniel Vandersluis  · 技术社区  · 15 年前

    我正在尝试通过ruby运行命令 system

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

    问题似乎是ruby正在使用 sh 壳,其中 $PATH 未正确设置,而不是 bash 猛击 默认情况下。

    有没有办法告诉ruby使用 而不是 ?

    3 回复  |  直到 15 年前
        1
  •  10
  •   sepp2k    15 年前

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

    `bash -c zip`
    

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

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

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

        2
  •  4
  •   Javier    15 年前

    我猜Ruby使用了 system() C函数,它使用 /bin/sh . 在大多数系统中, /垃圾箱/垃圾箱 只是另一个shell的符号链接,所以您可以更改为任何您想要的内容

        3
  •  0
  •   Corban Brook    15 年前

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