长话短说,我一直在研究一个项目,当我使用时我注意到了:
1.9.3p392 :001 > `gzip`
IRB::Abort: abort then interrupt!
from (irb):1:in `call'
from (irb):1:in ``'
from (irb):1
from /usr/local/rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>'
它将无限期地等待,直到我按CTRL + C.
虽然,我使用时:
1.9.3p392 :047 > system('gzip')
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
=> false
如果没有我使用CTRL + C
,它将继续为什么使用反引号会阻止进程继续?
答案 0 :(得分:2)
反引号运算符隐式重定向结果子shell的标准输出(它捕获子shell的输出),而system
则没有。您可以使用system
观察相同的挂起,如下所示:
system('gzip > /tmp/foo')
这明确捕获标准输出并以相同方式挂起。
当gzip
的输出重定向时,它会等待输入,直到收到EOF
或其他信号。没有输出重定向,它将发出您提到的错误消息。您可以从常规bash
shell获得相同的效果:
$ gzip
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
和
$ gzip > /tmp/foo
...
...
表示gzip
在收到适当信号之前会挂起。