1

长话短说,我一直在做一个项目,我注意到当我使用:

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

为什么使用反引号会阻止进程继续?

4

1 回答 1

2

反引号运算符隐式重定向生成的子shell 的标准输出(它会捕获子shell 的输出),而system不会。您可以使用以下方法观察相同的挂起system

system('gzip > /tmp/foo')

这显式捕获标准输出并将以相同的方式挂起。

gzip其输出重定向时,它将等待输入,直到接收到一个EOF或其他信号。如果没有输出重定向,它将发出您提到的错误消息。您可以从常规bashshell 获得相同的效果:

$ gzip
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h

和:

$ gzip > /tmp/foo
...

Where...表示gzip它将挂起,直到它接收到适当的信号。

于 2013-08-07T16:48:56.490 回答