Als Shell verfügt bash über zwei Streams, mit denen Sie diese Ausgabedaten umleiten können: stdout und stderr. Da diese Ausgabe irgendwo umgeleitet werden muss, verfügt Linux über einen bestimmten Knoten, der über / dev / null erreichbar ist . Alles, was Sie dorthin senden, verschwindet einfach in der Leere.
(Shells haben auch einen Eingabestream, aber ich werde dies hier ignorieren, da Sie darum gebeten haben, die Ausgabe zu unterdrücken.)
Diese Streams werden durch Zahlen dargestellt: 1 für stdout und 2 für stderr.
Wenn Sie also nur stdout umleiten möchten, tun Sie dies mit den Operatoren <
und >
(im Grunde genommen zeigen die Daten darauf, wohin sie fließen).
Angenommen, wir möchten stdout unterdrücken (umleiten nach / dev / null):
psql db -f sql.sql > /dev/null
Wie Sie sehen, ist dies standardmäßig stdout. Es wurde keine Stream-Nummer verwendet, wenn Sie die Stream-Nummer verwenden möchten, die Sie schreiben möchten
psql db -f sql.sql 1> /dev/null
Wenn Sie nun stderror (Stream Nummer 2) unterdrücken möchten, würden Sie verwenden
psql db -f sql.sql 2> /dev/null
Sie können auch einen Stream zu einem anderen umleiten, z. B. stderror zu stdout. Dies ist nützlich, wenn Sie alle Ausgaben irgendwo speichern möchten, regulär und fehlerhaft.
psql db -f sql.sql 2>&1 > log.txt
wohlgemerkt kann es keine Leerzeichen dazwischen geben 2>&1
Schließlich und manchmal am interessantesten ist die Tatsache, dass Sie alle Ausgaben unterdrücken können, indem Sie verwenden &>
, wenn Sie es "vollkommen leise" wollen.
psql db -f sql.sql &> /dev/null
PAGER="/dev/null" psql db -P pager=always -f sql.sql
dafür sorgen, dass die Ausgabe immer beendet wird.