在Ruby中的if语句中检查bash命令

在Ruby中的if语句中检查bash命令,ruby,Ruby,如何在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 lite

如何在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

您希望使用反勾号而不是双引号。要检查程序的输出,请执行以下操作:

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

您可能应该使用system()或Backticks,然后检查命令的退出状态($?.exitstatus):

这里有一个很好的快速提示:)

更新:

system("/usr/bin/fs wscell > /dev/null 2>&1")  # Returns false if command failed
has_afs = $?.exitstatus != 1  # Check if afs is running

如果(`/usr/bin/fs wscell>/dev/null 2>&`)
?您想看看它的返回值是“0对-1”还是从命令中输出文本“true”?@NeilSlater,您的双重音符号不起作用。你的编辑行。@iamauser:我不知道如何在backticks中转义backticks,所以。现在我这样做了-只要一个反斜杠就可以了:-)这是正确的语法,但请注意,这只会测试命令的输出。我想他需要检查命令的退出状态,更多细节在我的回答中。@gonz:说得好。不管OP想要测试什么,这都被过分简化了,因为我不知道它是什么。@gonz:这个语法不是已经在检查退出状态了吗?那么,即使命令失败也会是真的吗?@iamauser:嗯,它忽略了退出状态。它只是给您命令输出的任何内容。@iamauser:它没有检查退出状态代码,backticks返回已执行命令的输出,如果您将其放入if条件中,它只是将该字符串强制为bool。我只是猜测这不是您需要的,因为我不熟悉该命令,通常检查该命令的方法是通过退出状态代码,我在这里假设该命令提供了一个有用的状态代码。您有更具体的语法吗?如果您提供一个,我将切换我的接受。似乎我需要关心退出状态。它们会表达完全相同的东西,但你的方式它不被认为是惯用的ruby代码,因为它是多余的!=这是一个布尔运算符,它将返回true或false:)@iamauser:示例有帮助吗?请询问您是否需要进一步解释,并记住切换您的接受以备将来参考。请参阅我对Chuck答案的评论。当我的命令将所有内容转发到
/dev/null
时,Chuck给出的答案(-SOMETHING)应该有效。所以,坚持这一点作为我的接受,对不起。@iamauser:恐怕不应该。由于您的命令执行此操作,因此它将始终返回一个空字符串(输出将被重定向),无论命令返回什么字符串或状态代码,该字符串的计算结果都将始终为true。使用类似于
ls/bad/path>/dev/null 2>&1的东西自己测试它,因为该文件不存在,但它将返回“”,如果将其放入if条件中,则将评估为true;如果提供现有路径,则状态代码将为0(成功),但条件仍将评估为true。