Wenn ich unter Linux einen beliebigen Befehl im Terminal ausführe, gibt es eine Möglichkeit, Ausgabemeldungen zu unterdrücken, die einen bestimmten Satz enthalten?
Ich habe es versucht
./mycommand | grep -v "I dont want to see this"
aber die Nachrichten waren immer noch da.
Antwort1
Möglicherweise ist der unerwünschte Teil nicht Teil der Ausgabe an stderr, sondern an stdout.
Versuchen:
./mycommand 2>&1 | grep -v "I dont want to see this"
Sie können stderr und stdout an verschiedene Ziele weiterleiten. So können Sie sehen, woher die Ausgabe kommt:
./mycommand > >(grep -v "Ich möchte das nicht sehen" > stdout.log) 2> >(grep -v "Ich möchte das nicht sehen" > stderr.log)
Antwort2
Als Ergänzung zur Antwort von cmks: Wenn Sie auch möchten, dass der Rückgabecode der von mycommand
und nicht der von ist grep
, können Sie pipefail
den Rückgabestatus von verwenden und ignorieren grep
(für den Fall, dass die zu unterdrückende Zeichenfolge nicht gefunden wird).
(set -o pipefail; (./mycommand 2>&1) | { grep -v "I dont want to see this" || true; })
Beispiele:
(set -o pipefail; (echo "REMOVE" && false 2>&1) | { grep -v "REMOVE" || true; })
- Standardausgabe: nada
- zurückkehren:
1
(set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })
- Standardausgabe: nada
- zurückkehren:
0
(set -o pipefail; (echo "KEEP" && false 2>&1) | { grep -v "REMOVE" || true; })
- stdout:
KEEP
- zurückkehren:
1
- stdout:
(set -o pipefail; (echo "KEEP" && true 2>&1) | { grep -v "REMOVE" || true; })
- stdout:
KEEP
- zurückkehren:
0
- stdout: