2015-07-22 4 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 

Как предотвратить программу из печати уведомления сигнала (последний линия) ?

[BTW: даже 2>/dev/null dosn't work. вероятно, последняя строка, выведенная в 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++, и не знаете, идти. Если это результат выполнения run runtime, я предлагаю вам попробовать поймать SIGPIPE в вашем коде и спокойно завершить работу. (Не имеет значения, какой язык на самом деле вы, процесс тот же, что и синтаксис.)

В противном случае это больше bash/zsh/любая оболочка du jour. Перед запуском команды make обработчик сигнала для SIGPIPE должен выйти из строя.

Смежные вопросы