|
Wenn wir bereits einige Begriffe des GNU / Linux-Verzeichnisbaums haben, sollten wir zumindest mit der / dev / -Referenz vertraut sein, auf die sich alle Dateien beziehen Hardwaregeräte.
Wenn wir in das Verzeichnis schauen / Dev / Wir werden eine "Datei" namens sehen nullWenn wir es jedoch öffnen möchten, um seinen Inhalt anzuzeigen, teilt uns das System mit, dass dies nicht möglich ist, da es sich nicht um normalen Inhalt handelt. Ich habe die Wortdatei beigefügt, da, wie Sie alle für Linux wissen, alles (Hardware und Software) als Datei dargestellt wird. |
Welchem ​​Gerät entspricht / dev / null?
Stellen Sie sich aus praktischen Gründen eine Mülltonne, eine bodenlose Grube oder einen Weltraum vor, in den Sie alles werfen können, ohne es wiederherstellen zu können (egal wie sehr sich die Jungs von der NASA bemühen).
Aber wenn ich bereits Befehle wie rm habe, warum soll etwas Neues gelöscht werden?
Weil die Art und Weise, wie beide „Schwarzen Löcher“ funktionieren, völlig unterschiedlich ist: Wie würden Sie die Standardausgabe eines Fehlers in einem Befehl in einem Shell-Skript zur Laufzeit überschreiben? Hier kommt / dev / null ins Spiel.
Lassen Sie es uns anhand eines Beispiels sehen.
Wir haben eine Datei namens tests erstellt, die die Zeichenfolge "Hello World" enthält. Wenn wir den Inhalt dieser Datei in der Befehlszeile darstellen möchten, können Sie dies folgendermaßen tun:
Benutzer @ Laptop: ~ $ Katzentest
Hallo Welt
Wenn die Datei nicht vorhanden wäre oder als Test benannt wurde (mit einem 's' am Ende), wird in der Konsole der folgende Fehler angezeigt:
user @ Laptop: ~ $ Katzentests
cat: tests: Die Datei oder das Verzeichnis existiert nicht
Was können wir tun, um die Fehlermeldung zu vermeiden? Nun, leiten Sie die Ausgabe des Befehls im Fehlerfall einfach in eine "Mülltonne" um, dh nach / dev / null
Wie spezifizieren wir es im Fehlerfall? Hier geben Sie die Standardeingabe-, Ausgabe- und Fehlerwerte für ein Programm ein: STDIN, STDOUT und STDERR (die durch 0, 1 bzw. 2 ersetzt werden können). Auf diese Weise, wenn wir ...
Benutzer @ Laptop: ~ $ cat testet 2> / dev / null
Benutzer @ Laptop: ~ $
… Wir werden sehen, dass die Fehlermeldung nicht auf der Konsole angezeigt wird.
Sie müssen vorsichtig sein, da die Syntax wichtig ist: Zwischen den Zeichen 2 und> sollte kein Leerzeichen stehen. Andernfalls würde es Folgendes geben:
Benutzer @ Laptop: ~ $ cat testet 2> / dev / null
cat: tests: Die Datei oder das Verzeichnis existiert nicht
cat: 2: Die Datei oder das Verzeichnis existiert nicht
Im Gegensatz dazu wirkt sich ein Leerzeichen zwischen> und / dev / null nicht negativ auf das Ergebnis aus.
Wir könnten auch die Fehlerumleitung verwenden, um beispielsweise Fehler in einer Protokolldatei wie folgt zu erfassen:
user @ Laptop: ~ $ cat tests 2> err.log
Ein weiterer interessanter Fall wäre die Erfassung von Ergebnissen in einer anderen Datei, solange kein Fehler auftritt, für den wir Folgendes angeben würden:
user @ Laptop: ~ $ cat test 1> output_result 2> err.log
Schließlich ist es möglich, den Ausdruck «> / dev / null 2> & 1» einzufügen, in dem die Standardausgabe und die Fehlerausgabe kombiniert werden, und sie so umzuleiten, dass in keinem Fall Ausgabeinformationen erhalten werden.