Linux のターミナルで任意のコマンドを実行するときに、特定の文を含む出力メッセージを抑制する方法はありますか?
私は試した
./mycommand | grep -v "I dont want to see this"
しかし、メッセージはまだ残っていました。
答え1
おそらく、不要な部分は stderr ではなく stdout への出力の一部です。
試す:
./mycommand 2>&1 | grep -v "I dont want to see this"
stderr と stdout を異なるターゲットにパイプすることができます。そのため、出力がどこから来ているのかを確認できます。
./mycommand > >(grep -v "これは見たくない" > stdout.log) 2> >(grep -v "これは見たくない" > stderr.log)
答え2
mycommand
cmksの回答に追加すると、戻りコードを からではなく からのものにもしたい場合は、からの戻りステータスをgrep
使用して無視することができます(抑制する文字列が見つからない場合)。pipefail
grep
(set -o pipefail; (./mycommand 2>&1) | { grep -v "I dont want to see this" || true; })
例:
(set -o pipefail; (echo "REMOVE" && false 2>&1) | { grep -v "REMOVE" || true; })
- 標準出力: なし
- 戻る:
1
(set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })
- 標準出力: なし
- 戻る:
0
(set -o pipefail; (echo "KEEP" && false 2>&1) | { grep -v "REMOVE" || true; })
- 標準出力:
KEEP
- 戻る:
1
- 標準出力:
(set -o pipefail; (echo "KEEP" && true 2>&1) | { grep -v "REMOVE" || true; })
- 標準出力:
KEEP
- 戻る:
0
- 標準出力: