在Ruby中成功执行bash命令是否返回真正的布尔对象?

在Ruby中成功执行bash命令是否返回真正的布尔对象?,ruby,bash,command,boolean,Ruby,Bash,Command,Boolean,这是我好奇了一段时间的事情。在Ruby中执行bash命令时(例如w/`usage),它是否会在完成时返回真布尔值,如果失败则返回假布尔值?非常感谢您的帮助 如果失败,它应该返回nil,如果成功,它应该返回true。如果使用system()执行该命令,失败时将返回false或nil(取决于失败的内容),成功时返回true 但是,如果您使用Backticks,则结果将是被剥离的程序写入STDOUT的内容 一般来说,有四种方法可以在Ruby中执行命令,并以不同的方式对待STDIN、STDOUT和STD

这是我好奇了一段时间的事情。在Ruby中执行bash命令时(例如w/`usage),它是否会在完成时返回真布尔值,如果失败则返回假布尔值?非常感谢您的帮助

如果失败,它应该返回
nil
,如果成功,它应该返回
true

如果使用
system()
执行该命令,失败时将返回
false
nil
(取决于失败的内容),成功时返回
true

但是,如果您使用
Backticks
,则结果将是被剥离的程序写入
STDOUT
的内容


一般来说,有四种方法可以在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

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

您可以使用系统(“”)。它根据命令的结果返回true或false

在ruby中可以使用多种方法执行命令。下面的文章将解释其中的大部分


`echo'foo'`#=>“foo\n”
您将``与
内核#系统
混淆,因此,在使用system()时,如果命令执行但未完成,则返回错误false,如果命令执行但由于错误而未完成,则返回nil。对吗?谢谢你的意见!与Aaron Cronin的方法一起使用将证明是非常有益的!