如何在Ruby中的if语句中检查bash命令的返回值(true / false)。我想要这样的东西工作,
if ("/usr/bin/fs wscell > /dev/null 2>&1")
has_afs = "true"
else
has_afs = "false"
end
它抱怨以下错误含义,它将始终返回true。
(irb):5: warning: string literal in condition
正确的语法是什么?
更新:
/usr/bin/fs wscell
查找afs
安装和运行状况。它将抛出一个这样的字符串,
This workstation belongs to cell <afs_server_name>
如果afs
未运行,则命令退出状态为1
答案 0 :(得分:6)
你需要反引号而不是双引号。检查程序的输出:
has_afs = `/usr/bin/fs wscell > /dev/null 2>&1` == SOMETHING ? 'true' : 'false'
在SOMETHING中填写了您正在寻找的内容。
答案 1 :(得分:4)
你应该使用system()或Backticks和然后检查命令的退出状态($ ?. exitstatus):
快速阅读:http://rubyquicktips.com/post/5862861056/execute-shell-commands)
更新:
system("/usr/bin/fs wscell > /dev/null 2>&1") # Returns false if command failed
has_afs = $?.exitstatus != 1 # Check if afs is running