In einem Bash-Skript möchte ich einen Befehl ausführen, während der stderr sowohl an eine Datei als auch an das Terminal weitergeleitet wird. Ich möchte jedoch, dass stderr im Dateideskriptor '2' bleibt, damit ich ihn von einem externen Prozess aus analysieren kann, der dieses Bash-Skript aufruft.
Alle Lösungen, die ich bisher gesehen habe, beinhalten das Austauschen von stdout mit stderr und das anschließende Wechseln in eine andere Datei, zum Beispiel :
find /var/log 3>&1 1>&2 2>&3 | foo.file
Wenn ich dieses Skript von einem anderen aufrufen soll, wird stdout und stdout zu stderr, was für mich nicht gut ist. Ich habe versucht, sie wieder so auszutauschen:
find /var/log 3>&1 1>&2 2>&3 | foo.file 4>&1 1>&2 2>&4
aber das geht nicht.
find
manchmal im Terminal desynchronisieren. Dies liegt antee
, Puffern usw. Wennfind
stdout und stderr direkt auf dasselbe Gerät geschrieben werden, tritt das Problem nie auf. Wenn die beiden Streams jedoch später zusammengeführt werden , ist dies möglich.