Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 当在没有任何选项的情况下发出gzip时,Kernel#卡住了,Kernel#系统没有_Ruby_Linux_Gzip - Fatal编程技术网

Ruby 当在没有任何选项的情况下发出gzip时,Kernel#卡住了,Kernel#系统没有

Ruby 当在没有任何选项的情况下发出gzip时,Kernel#卡住了,Kernel#系统没有,ruby,linux,gzip,Ruby,Linux,Gzip,长话短说,我一直在做一个项目,我注意到当我使用: 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>' 1.9.3p392 :047 >

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

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>'
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的情况下继续


为什么使用backticks会阻止进程继续?

backticks操作符隐式重定向生成的子shell的标准输出(它这样做是为了捕获子shell的输出),而
系统不这样做。您可以使用
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
将挂起,直到收到适当的信号。

谢谢Richard!这肯定回答了我的问题。
$ gzip > /tmp/foo
...