3 votos

gnome-terminal comienza con "grep: escribir error: tubería rota" mensaje

Estoy corriendo Ubuntu 14.04.3, es uptodate. No sé por qué, por un par de días empecé a tomar grep: write error: Broken pipe mensaje en el lanzamiento de gnome-terminal . Parece ser inofensiva, pero me molesta. ¿Cómo puedo mejorarlo?

EDIT: me mudé alias y funciones de cada uno de los archivos separados como .bash_aliases y .bash_functions y añadido un comando para cargar desde .bashrc

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

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

Si no me carga .bash_functions problema desaparece.

Estoy tratando de encontrar a la defectuosa mediante la desactivación de cada función uno a uno.

Este me da el mismo error, pero cuando me desactivar sigo obteniendo el mismo error, así que puede tener más funciones defectuosas.

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

 grep:  development
 write error: Broken pipe

Me pregunto por qué he de empezar a tomar ese error.

EDIT2:

Me encontré con un problema similar aquí boken tubería

La root del problema también parece similar.

He probado el examen de comandos en el enlace que tienen el mismo error:

 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:

A pesar de que unbuffer solución que he publicado a continuación como una respuesta a mi propia pregunta funciona, no estoy satisfecho con ella, pero mi conocimiento acerca de la depuración es limitado. Acoording para este enlace https://lists.gnu.org/archive/html/bug-coreutils/2007-11/msg00080.html surge a partir de SIGPIPE trampa por otra tarea, y este vínculo https://lists.gnu.org/archive/html/bug-coreutils/2007-11/msg00154.html identifica la causa exacta del problema, es uno de los pam módulo de autenticación que estoy en problemas con ella recientemente.

3voto

kenn Puntos 1115

Después de horas de lucha con el problema, he encontrado una solución de trabajo (eso espero)

El problema parece ser más profundo y complicado. Mucha gente se reunió el mismo error. La fijación está más allá de mi cobertura.

Más cercano solución publicado aquí how-can-i-fix-a-roto-pipe-error por Andrew Beal en la parte inferior como :

ls -lt $PWD|dd obs=1M | grep -m 1 ^d | cut -b 51-

no es limpio.

Cuando yo intuía que esto está relacionado con el tubo de búfer me dio un tiro a unbuffer comando como :

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

Funciona bien.

Espero que alguien puestos de la causa real del problema.

2voto

ieplugin Puntos 216

Hay una gran explicación de este problema en este Super Usuario respuesta: ¿Cómo puedo arreglar una Tubería Rota de error?.

Los comandos en las tuberías que se ejecutan de forma asíncrona: esto significa que en una tubería, tales como command1 | command2 no hay garantía de que command1 terminará antes de command2.

Cuando se utiliza [...] | grep | head -n 1, head termina tan pronto como se haya leído una sola línea; si esto sucede antes de grep ha terminado de escribir a la tubería, grep recibe una señal SIGPIPE y errores.

Como se explicó en la respuesta a que el Usuario estupendo respuesta, una solución es el resultado de la canalización de lo antes head de la cartera tail -n +1 primera, que ignorará la señal SIGPIPE:

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

Pero en este caso no hay ni siquiera necesidad de head, desde grep tiene una opción para imprimir sólo la primera coincidencia:

[...] | grep -m 1

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: