2015-07-22 62 views
0

的输出。当执行命令(在Linux中):忽略“断管”信号

go run test.go |head 

的输出是:

line 0 
line 1 
line 2 
line 3 
line 4 
line 5 
line 6 
line 7 
line 8 
line 9 
signal: broken pipe 

如何防止程序打印信号通知(最后线)?

[顺便说一句:即使2>/dev/null dosn't工作。可能是输给TTY的最后一行]

+1

你试过'go run test.go 2>/dev/null | head'? – toth

+0

工作!谢谢。 –

+0

我做了'go run test.go | head 2>/dev/null' –

回答

1

您不打印代码test.go所以很难判断。 例如它是否在打印之间进行睡眠?

破碎的管将happpen因为在管的链的程序的一个:

a.exe|b.exe|c.exe|d.exe 

早期终止。当test.go结束运行之前,test.go终止,但头部仍然期待输入 或更可能的头部终止。特别是因为头的默认值是10行。

该测试是做go run test.go |head -20,看看您是否打印20

我没能在C++中复制此之后获得了断管,不知道去了。如果这是运行时运行的结果,我建议你尝试在代码中捕获SIGPIPE并安静地终止。 (无论你真的是什么语言,过程是相同的语法不同。)

否则,这是更多的bash/zsh /无论壳du jour是。在运行该命令之前,请为SIGPIPE创建一个信号处理程序以完全退出。