6

如何在 Ruby 的 if 语句中检查 bash 命令的返回值(真/假)。我想要这样的工作,

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 退出

4

2 回答 2

7

你想要反引号而不是双引号。检查程序的输出:

has_afs = `/usr/bin/fs wscell > /dev/null 2>&1` == SOMETHING ? 'true' : 'false'

在 SOMETHING 中填写了您要查找的内容。

于 2013-04-03T19:02:25.513 回答
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
于 2013-04-03T19:07:09.050 回答