0

这是我一直好奇的事情。在 Ruby 中执行 bash 命令时(例如 w/ ` 用法),它是否在完成时返回 true 布尔值,如果失败则返回 false ?非常感谢任何帮助!

4

4 回答 4

3

如果您使用system()执行命令,您将获得falsenil失败(取决于失败的原因),以及true成功。

但是,如果您使用Backticks,则结果将是被脱壳的程序写入的任何内容STDOUT

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

于 2013-11-13T12:56:21.687 回答
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
于 2013-11-13T13:15:20.710 回答
0

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

您可以使用系统('')。它根据命令的结果返回真或假。

您可以使用多种方式在 ruby​​ 中执行命令。他们中的大多数在下面的文章中进行了解释。

在 Ruby 中运行 shell 命令的 5 种方法

于 2014-10-14T16:49:09.913 回答
-2

它应该nil在失败和true成功时返回。

于 2013-11-13T12:53:53.320 回答