GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Fünf Möglichkeiten, Umleitungsoperatoren in Bash zu verwenden

Daten werden über stdin in den Computer eingegeben (normalerweise die Tastatur), und die resultierende Ausgabe geht an stdout (normalerweise die Schale). Diese Pfade werden Streams genannt . Es ist jedoch möglich, diese Eingabe- und Ausgabeorte zu ändern, was dazu führt, dass der Computer Informationen von einer anderen Stelle als stdin erhält oder senden Sie die Ergebnisse an einen anderen Ort als stdout . Diese Funktionalität wird als Umleitung bezeichnet .

In diesem Artikel lernen Sie fünf Umleitungsoperatoren kennen, darunter einen für stderr . Ich habe jeweils Beispiele bereitgestellt und das Material so präsentiert, dass Sie es auf Ihrem eigenen Linux-System duplizieren können.

Reguläre Ausgabe> Operator

Der Output Redirector ist wahrscheinlich der bekannteste der Operatoren. Die Standardausgabe (stdout ) befindet sich normalerweise im Terminalfenster. Zum Beispiel, wenn Sie das date eingeben Befehl, wird die resultierende Zeit- und Datumsausgabe auf dem Bildschirm angezeigt.

[damon@localhost ~]$ date
Tue Dec 29 04:07:37 PM MST 2020
[damon@localhost ~]$

Es ist jedoch möglich, diese Ausgabe von stdout umzuleiten woanders hin. In diesem Fall leite ich die Ergebnisse in eine Datei mit dem Namen specifications.txt um . Ich werde bestätigen, dass es funktioniert hat, indem ich die cat verwende Befehl zum Anzeigen des Dateiinhalts.

[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ cat specifications.txt 
Tue Dec 29 04:08:44 PM MST 2020
[damon@localhost ~]$ 

Das Problem mit dem > Redirector besteht darin, dass alle vorhandenen Daten in der Datei überschrieben werden. In diesem Stadium haben Sie jetzt date Informationen in der specifications.txt Datei, oder? Wenn Sie hostname > specifications.txt eingeben , wird die Ausgabe an die Textdatei gesendet, überschreibt jedoch die vorhandenen Zeit- und Datumsinformationen aus den früheren Schritten.

[damon@localhost ~]$ hostname > specifications.txt 
[damon@localhost ~]$ cat specifications.txt 
localhost.localdomain
[damon@localhost ~]$ 

Es ist leicht, mit > in Schwierigkeiten zu geraten Redirector durch versehentliches Überschreiben bestehender Informationen.

[ Den Lesern hat es auch gefallen: 10 grundlegende Linux-Befehle, die Sie kennen müssen ]

Normale Ausgabe anhängen>> Operator

Der Anhang >> Der Operator fügt die Ausgabe dem vorhandenen Inhalt hinzu, anstatt ihn zu überschreiben. Auf diese Weise können Sie die Ausgabe mehrerer Befehle in eine einzelne Datei umleiten. Beispielsweise könnte ich die Ausgabe von date umleiten mit > Operator und leiten Sie dann hostname um und uname -r in die specifications.txt Datei mit >> Betreiber.

[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ hostname >> specifications.txt 
[damon@localhost ~]$ uname -r >> specifications.txt 
[damon@localhost ~]$ cat specifications.txt 
Tue Dec 29 04:11:51 PM MST 2020
localhost.localdomain
5.9.16-200.fc33.x86_64
[damon@localhost ~]$ 

Hinweis :Der >> Redirector funktioniert sogar mit einer leeren Datei. Das bedeutet, dass Sie möglicherweise

ignorieren Sie den regulären > Redirector, um das Potenzial zum Überschreiben von Daten zu verringern, und verlassen Sie sich immer auf >> stattdessen Redirector. Es ist keine schlechte Angewohnheit.

Normale Eingabe

Der Input-Redirector ruft Daten in einem Stream aus einer bestimmten Quelle ab. Üblicherweise erhalten Programme ihre Eingaben über die Tastatur. Daten können jedoch auch aus einer anderen Quelle, z. B. einer Datei, abgerufen werden.

Es ist an der Zeit, ein Beispiel mit sort zu erstellen Befehl. Erstellen Sie zunächst eine Textdatei mit dem Namen mylist.txt das die folgenden Zeilen enthält:

cat
dog
horse
cow

Beachten Sie, dass die Tiere nicht sind in alphabetischer Reihenfolge aufgelistet.

Was ist, wenn Sie sie der Reihe nach auflisten müssen? Sie können den Inhalt der Datei in den sort ziehen Befehl mit dem < Betreiber.

[damon@localhost ~]$ sort < mylist.txt 
cat
cow
dog
horse
[damon@localhost ~]$ 

Sie könnten sogar etwas ausgefallener werden und die sortierten Ergebnisse in eine neue Datei umleiten:

[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt 
cat
cow
dog
horse
[damon@localhost ~]$ 

Normaler Fehler 2> Operator

Die stdout zeigt die erwarteten Ergebnisse an. Treten Fehler auf, werden diese anders behandelt. Fehler werden als Dateideskriptor 2 gekennzeichnet (Standardausgabe ist Dateideskriptor 1). Wenn ein Programm oder Skript nicht die erwarteten Ergebnisse generiert, wird ein Fehler ausgegeben. Der Fehler wird normalerweise an die stdout gesendet , aber es kann woanders umgeleitet werden. Die stderr Operator ist 2> (für Dateideskriptor 2).

Hier ist ein einfaches Beispiel mit dem falsch geschriebenen ping Befehl:

[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$

Hier ist derselbe falsch geschriebene Befehl, bei dem die Fehlerausgabe nach /dev/null umgeleitet wurde :

[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$ 

Die resultierende Fehlermeldung wird nach /dev/null umgeleitet statt stdout , daher wird kein Ergebnis oder keine Fehlermeldung auf dem Bildschirm angezeigt.

Hinweis :/dev/null , oder der Bit-Bucket , wird als Mülleimer für die Kommandozeile verwendet. Unerwünschte Ausgaben können an diesen Ort umgeleitet werden, um sie einfach verschwinden zu lassen. Vielleicht schreiben Sie beispielsweise ein Skript und möchten einige seiner Funktionen testen, wissen aber, dass es Fehler auslöst, die Sie in dieser Entwicklungsphase nicht interessieren. Sie können das Skript ausführen und es anweisen, Fehler an /dev/null umzuleiten der Einfachheit halber.

Rohr | Betreiber

Ken Hess hat bereits einen soliden Artikel über die Verwendung der Pipe | Operator, daher werde ich hier nur eine sehr kurze Demonstration zeigen.

Die Pipe nimmt die Ausgabe des ersten Befehls und macht sie zur Eingabe des zweiten Befehls. Vielleicht möchten Sie eine Liste aller Verzeichnisse und Dateien in /etc sehen Verzeichnis. Sie wissen, dass dies eine lange Liste sein wird und dass der größte Teil der Ausgabe über den oberen Rand des Bildschirms hinausscrollen wird. Das less Der Befehl teilt die Ausgabe in Seiten auf, und Sie können dann nach oben oder unten durch die Seiten blättern, um die Ergebnisse anzuzeigen. Die Syntax besteht darin, ls auszugeben Befehl, um den Inhalt von /etc aufzulisten , und verwenden Sie dann pipe, um diese Liste an less zu senden damit es in Seiten aufgeteilt werden kann.

[damon@localhost ~]$ ls /etc | less

Kens Artikel enthält viele weitere großartige Beispiele. Persönlich verwende ich command | less und command | grep string am häufigsten.

[ Jetzt herunterladen:Eine Anleitung für Systemadministratoren zum Bash-Skripting. ] 

Abschluss

Umleitungsoperatoren sind sehr praktisch, und ich hoffe, diese kurze Zusammenfassung hat Ihnen einige Tricks zur Manipulation von Ein- und Ausgabe geliefert. Der Schlüssel ist, sich daran zu erinnern, dass > Operator überschreibt vorhandene Daten.


Linux
  1. Welche Shell sollte ich verwenden – Tcsh Vs Bash?

  2. Ungewöhnliche Möglichkeiten, Variablen in Bash-Skripten zu verwenden

  3. wie benutzt man kill SIGUSR2 in bash?

  4. Was ist die Verwendung von $ # in Bash

  5. Verwenden Sie .bashrc, ohne sftp zu beschädigen

So verwenden Sie den Bash-Lesebefehl

So leiten Sie stderr in Bash auf stdout um

So verwenden Sie Bash-Dateitestoperatoren in Linux

7 Möglichkeiten, den Linux Head-Befehl zu verwenden

7 Möglichkeiten, den Linux Watch-Befehl zu verwenden

Was ist Zsch? Sollten Sie es verwenden?