Cuando ejecuto un comando arbitrario en la terminal en Linux, ¿hay alguna manera de suprimir los mensajes de salida que contienen una oración determinada?
Lo intenté
./mycommand | grep -v "I dont want to see this"
pero los mensajes seguían ahí.
Respuesta1
Quizás la parte no deseada sea parte de la salida a stderr pero a stdout.
Intentar:
./mycommand 2>&1 | grep -v "I dont want to see this"
Puede canalizar stderr y stdout a diferentes objetivos. Entonces puedes ver de dónde viene el resultado:
./mycommand > >(grep -v "No quiero ver esto" > stdout.log) 2> >(grep -v "No quiero ver esto" > stderr.log)
Respuesta2
Para agregar a la respuesta de cmks, si también desea que el código de retorno sea el de mycommand
y no el de grep
, puede usar pipefail
e ignorar el estado de retorno de grep
(para cuando no se encuentra la cadena a suprimir)
(set -o pipefail; (./mycommand 2>&1) | { grep -v "I dont want to see this" || true; })
Ejemplos:
(set -o pipefail; (echo "REMOVE" && false 2>&1) | { grep -v "REMOVE" || true; })
- salida estándar: nada
- devolver:
1
(set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })
- salida estándar: nada
- devolver:
0
(set -o pipefail; (echo "KEEP" && false 2>&1) | { grep -v "REMOVE" || true; })
- salida estándar:
KEEP
- devolver:
1
- salida estándar:
(set -o pipefail; (echo "KEEP" && true 2>&1) | { grep -v "REMOVE" || true; })
- salida estándar:
KEEP
- devolver:
0
- salida estándar: