在Ruby中成功执行bash命令会返回一个真正的布尔对象吗?

时间:2013-11-13 12:50:26

标签: ruby bash command boolean

这是我一段时间以来一直很好奇的事情。当在Ruby中执行bash命令时(例如w /`usage),它在完成时返回一个真值布尔值,如果失败则返回false吗?非常感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

如果您使用system()执行命令,则失败时会falsenil(取决于失败的原因),成功时会true

但是,如果您使用Backticks,结果将是被外围程序写入STDOUT的任何内容。

http://rubyquicktips.com/post/5862861056/execute-shell-commands

答案 1 :(得分:0)

通常,有四种方法可以在Ruby中执行命令,并以不同方式处理STDIN,STDOUT和STDERR。

# Kernel#system
# returns true (zero exit status), false (non zero exit status) or nil (command execution fails)

# Kernel#`  (backticks)
# returns the STDOUT
# outputs the STDERR, but not capture it
# The built-in syntax %x{...} uses this method

# IO#popen
# the STDIN and STDOUT will be connected to the returned IO object

# Open3#popen3
# STDIN, STDOUT and STDERR are all captured to IO objects

您仍然可以在原始命令中单独处理STDERR,例如:

system("[command_which_fails]") #=> STDERR & false
system("[command_which_fails] > /dev/null 2>&1") #=> false

答案 2 :(得分:0)

反引号``不会返回true或false,但这并不意味着你无法检查命令的成功执行。你可以随时使用$?它会返回错误代码。如果最后一个命令成功运行,则它应为0。

您可以使用系统('')。它会返回true或false,具体取决于命令的结果。

您可以使用多种方式在ruby中执行命令。其中大多数都在下面的文章中解释。

5 ways to run shell commands in Ruby

答案 3 :(得分:-2)

失败后应返回nil,成功时返回true