我正在用ruby编写一些代码,我想在程序启动之前测试命令的存在。如果未安装该命令,我想显示错误消息并退出程序。所以现在,我正在这样做。
puts `type -P spark &>/dev/null && continue || { echo "You must install spark"; exit 0; } `
所以,一切正常,但是,“退出0”不是,我无法弄清楚原因。 你有什么想法解决这个问题吗?或者甚至更好,还有另一种方法吗?
答案 0 :(得分:3)
您没有退出脚本的原因是退出调用是在反引号内。它正在退出调用运行spark的子shell,但这不是解释ruby脚本的过程。
你可以查看$的内容吗?变量,在命令运行后返回Process:backtick命令的状态。
然而,正如Daniel Pittman建议的那样,使用像FileTest这样的东西来检查可执行文件是否更容易。但是,您可能希望将其与返回值的测试结合起来,以防发生其他更复杂的故障。答案 1 :(得分:2)
更好的方法是:
ENV["PATH"].split(':').any? {|x| FileTest.executable? "#{x}/spark" }
尝试获取完整路径的季节,或使用File.join
构建路径或平台路径分隔符等等。