Warum funktioniert `2>&1` in dieser Pipeline nicht?

Warum funktioniert `2>&1` in dieser Pipeline nicht?

Ich kann keine Möglichkeit finden, den Fehler auf meinem NAS umzuleiten.

Die Shell ist /bin/shund wenn ich sie verwende, > mylogfile.log 2>&1wird immer noch der Fehler auf dem Terminal angezeigt. Der spezifische Befehl ist

find /volume1/ | grep "totoro" > ~/totoro.log 2>&1

und ich sehe einen Fehler von find. Gibt es eine Möglichkeit, die Umleitung zum Laufen zu bringen? Wie schreibe ich findFehler in die Protokolldatei?

Antwort1

find /volume1/ | grep "totoro" > ~/totoro.log 2>&1

Ihre 2>&1Auswirkungen grepnur, nicht find. Im folgenden Befehl die ersten 2>&1Auswirkungen find:

find /volume1/ 2>&1 | grep "totoro" > ~/totoro.log 2>&1   # probably wrong

Dies sendet jedoch stderr zusammen mit stdout von findan grep. Sie möchten stderr wahrscheinlich nicht grepvon filtern find. Ich nehme an, Sie möchten stdout und stderr des gesamten zusammengesetzten Befehls erfassen. Wenn ja, führen Sie den Befehl in einer expliziten Subshell aus und leiten Sie seine Ausgabe- und Fehlerströme um:

(find /volume1/ 2>&1 | grep "totoro") > ~/totoro.log 2>&1

Antwort2

Bitte beachten Sie den Befehl „tee“. Er liest von der Standardeingabe und schreibt in die Standardausgabe und in Dateien. Dies kann hier hilfreich sein.

verwandte Informationen