Ich würde generell empfehlen, die Vorgehensweise von Bourne-again SHell zu befolgen , da bash die wohl beliebteste Unix-Shell überhaupt ist. Bash verwendet normalerweise entweder &>
oder 2>&1
. IMHO, keiner ist "perfekt", also empfehle ich, diesen Unsinn zu vergessen. Welches Sie verwenden sollten, hängt realistisch davon ab, was Sie zu tun versuchen.
2>&1
Führt stderr mit stdout zusammen. Dies kann nützlich sein, wenn Sie beispielsweise stderr-Text weiterleiten möchten. Wenn Sie zum Beispiel sehen möchten, ob ein Programm eine bestimmte stderr-Nachricht druckt, aber nicht möchten, dass Ihr Bildschirm mit (vermutlich) unwichtigem Müll gefüllt ist, können Sie so etwas tun program 2>&1 | grep crashed
, dass stdout und stderr von einem Programm aus durchsucht genannt "Programm" für das Wort "abgestürzt".
Wenn Sie jedoch nicht möchten, dass ein Programm überhaupt etwas druckt, können Sie einfach program &> /dev/null
eine spezielle Datei ausführen , die stderr und stdout nach / dev / null umleitet und die Dinge auf magische Weise verschwinden lässt. Wenn Sie die Ausgabe eines Programms speichern möchten (um möglicherweise einen Fehler oder etwas zu melden), können Sie sowohl stderr als auch stdout in eine Datei program &> log.txt
umleiten: Alle Daten werden in eine Datei namens "log.txt" umgeleitet. Wenn Sie möchten , können Sie stdout und stderr über program 2> log.txt > log.txt
oder umleiten. program 2>&1 | cat > log.txt
Beide haben den gleichen Effekt wie using &>
. Wenn Sie so etwas tun program 2>&1 > file
, wird nur stdout umgeleitet, stderr kann jedoch weiterhin an ein anderes Programm wie cat weitergeleitet werden, das wie oben gezeigt umgeleitet werden kann. Tippen Sie jedoch&>
ist einfacher als jedes der obigen Beispiele, da weniger Zeichen eingegeben werden müssen (und es für Menschen ein bisschen einfacher zu lesen ist). Beachten Sie, dass program 2> log.txt > log.txt
dies mit größerer Wahrscheinlichkeit bei Nicht-Bash-Shells der Fall sein kann.
PS: Wenn Sie sich Sorgen machen, dass andere Benutzer andere Shells verwenden, können Sie eine erste Zeile Ihres Skripts hinzufügen, die als "magische Zahl" oder "Schebang" bezeichnet wird. Dies ist im Wesentlichen eine Möglichkeit, um sicherzustellen, dass andere Computer (insbesondere solche mit Unix-ähnlichen Betriebssystemen) wissen, mit welchem Programm ein Skript ausgeführt werden soll. Unterschiedliche Skripte verwenden unterschiedliche Shebangs. Ein Shebang für ein Bash-Skript sieht folgendermaßen aus:
#!/bin/bash
Wenn Sie das Obige als erste Zeile eines bestimmten Skripts verwenden, wird bash im Allgemeinen zum Ausführen des Skripts verwendet. Dadurch wird es für jemanden viel schwieriger, das Skript versehentlich mit der falschen Shell auszuführen.
PS: Ich werde nicht lügen: Bis jetzt wusste ich nicht, dass man es gebrauchen kann >&
, aber was Bash angeht, scheint es dasselbe zu tun wie &>
. Sie lernen jeden Tag etwas Neues.