gnome-terminal начинается с “ grep: write error: Broken pipe ” сообщение

Я запускаю Ubuntu 14.04.3, это uptodate. Я не знаю, почему, в течение нескольких дней, я начал принимать сообщение grep: write error: Broken pipe о запуске gnome-терминала. Это кажется безобидным, но меня это беспокоит. Как я могу его отладить?

EDIT: я переместил псевдонимы и функции каждый для разделения файлов, таких как .bash_aliases и .bash_functions, и добавил команду, чтобы загрузить их из .bashrc

 if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
 fi

 if [ -f ~/.bash_functions ]; then
. ~/.bash_functions
 fi

Если я не загружаю .bash_functions проблема исчезает.

Я пытаюсь найти неисправный, отключая каждую функцию по одному.

Это дает мне та же ошибка, но когда я отключил ее, я продолжаю получать ту же ошибку, поэтому у меня могут быть более неисправные функции.

 ls -lt  $PWD| grep ^d | head -1 | cut -b 51- 

 grep:  development
 write error: Broken pipe

Интересно, почему я начинаю принимать эту ошибку.

EDIT2:

Я нашел аналогичную проблему здесь boken pipe

Корень проблемы также кажется схожим.

Я попробовал данную тестовую команду в ссылке, которая имеет ту же ошибку:

 bash -c '(while echo foo; do :; done); echo status=$? >&2' |  head
 foo
 foo
 foo
 foo
 foo
 foo
 foo
 foo
 foo
 foo
 bash: line 0: echo: write error: Broken pipe
 status=0

EDIT3:

Хотя это unbuffer обходное решение я разместил ниже поскольку ответ на мой собственный вопрос работает, я не удовлетворен этим, но мои знания об отладке ограничены. В соответствии с этой ссылкой boken pipe он проистекает из ловушки SIGPIPE другой задачей, и эта ссылка https://lists.gnu.org/archive/html/bug-coreutils/2007-11/msg00154.html точно определяет причину проблемы, это один из модулей проверки подлинности pam, с которыми я недавно столкнулся с проблемой.

1
задан 16 February 2016 в 18:25

1 ответ

В этом ответе суперпользователя есть большое объяснение этой проблемы: как я могу исправить ошибку Broken Pipe?. [! ​​d0]

Команды в трубах выполняются асинхронно: это означает, что в канале, таком как command1 | command2 нет гарантии, что command1 закончится до command2.

При использовании [...] | grep | head -n 1, head заканчивается, как только он читает одну строку; если это произойдет до того, как grep закончит запись в трубу, grep получит сигнал SIGPIPE и ошибки.

Как объясняется в ответе ниже, что ответ Суперпользователя, обходным путем является выход на выход из того, что было раньше head в конвейере до tail -n +1, которое игнорирует сигнал SIGPIPE:

command | tail -n +1 | head -n 1

Но в этом случае нет необходимости в head, так как grep имеет возможность распечатывать только первое совпадение:

[...] | grep -m 1
2
ответ дан 23 May 2018 в 13:32
  • 1
    Спасибо, что ответили. Как я могу применить его к моему конкретному случаю для ls -lt $PWD| grep ^d | head -1 | cut -b 51- и обобщить его? – kenn 14 February 2016 в 23:19
  • 2
    @kenn У меня было неправильное представление о трубах, и ответ не был технически точным раньше, это должно быть сейчас. Также см. Обновление, нет реальной потребности в grep | head. – kos 14 February 2016 в 23:57
  • 3
    @kenn Значение: ls -lt $PWD| grep -m 1 ^d | cut -b 51-. – kos 15 February 2016 в 00:18
  • 4
    ls -lt $PWD| grep -m 1 ^d | cut -b 51- все равно дает мне ту же ошибку development ls: write error: Broken pipe :( – kenn 15 February 2016 в 00:24
  • 5
    @kenn Похоже, то же самое происходит и с cut. Как насчет ls -lt $PWD| grep ^d | tail -n +1 | head -n 1 | cut -b 51-? – kos 15 February 2016 в 00:27

Другие вопросы по тегам:

Похожие вопросы: