Quando executo um comando arbitrário no terminal do Linux, existe uma maneira de suprimir mensagens de saída que contêm uma determinada frase?
tentei
./mycommand | grep -v "I dont want to see this"
mas as mensagens ainda estavam lá.
Responder1
Talvez a parte indesejada faça parte da saída do stderr, mas do stdout.
Tentar:
./mycommand 2>&1 | grep -v "I dont want to see this"
Você pode canalizar stderr e stdout para destinos diferentes. Então você pode ver de onde vem a saída:
./mycommand > >(grep -v "Não quero ver isso" > stdout.log) 2> >(grep -v "Não quero ver isso" > stderr.log)
Responder2
Para adicionar à resposta do cmks, se você também deseja que o código de retorno seja from mycommand
e não from grep
, você pode usar pipefail
e ignorar o status de retorno from grep
(para quando a string a ser suprimida não for encontrada)
(set -o pipefail; (./mycommand 2>&1) | { grep -v "I dont want to see this" || true; })
Exemplos:
(set -o pipefail; (echo "REMOVE" && false 2>&1) | { grep -v "REMOVE" || true; })
- saída padrão: nada
- retornar:
1
(set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })
- saída padrão: nada
- retornar:
0
(set -o pipefail; (echo "KEEP" && false 2>&1) | { grep -v "REMOVE" || true; })
- saída padrão:
KEEP
- retornar:
1
- saída padrão:
(set -o pipefail; (echo "KEEP" && true 2>&1) | { grep -v "REMOVE" || true; })
- saída padrão:
KEEP
- retornar:
0
- saída padrão: