在ruby中设置exec spawn和popen的搜索路径

时间:2015-03-31 07:20:30

标签: ruby

假设有可执行文件/ path / to / hello。我想这样做

set-search-path "/path/to:/another/path:/usr/bin:/bin"
IO.popen({},[["hello","argv0"],"argv1"])

我知道我们可以指定“hello”的完整路径,但如果可能的话,我更愿意看一个带搜索路径的解决方案。

在调用ruby解释器之前设置路径也不是我想要的。

我想这涉及设置ruby本身的环境,因此可能是setenv(3)c库函数的包装器。

还请指出如果我以另一种方式使用popen,将字符串传递给shell。

我目前正在运行ruby2.1。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

paths = "/path/to:/another/path:/usr/bin:/bin"
paths.split(':').each{|path|
  if File.exist?(path)
    IO.popen(...)
    break
  end
end
  

还请指出如果我以另一种方式使用popen,将字符串传递给shell。

popen方法可以接受环境哈希,例如:

IO.popen({'PATH' => '/path/to:/another/path:/usr/bin:/bin'}, cmd)