Was bedeutet ">>" im Terminalbefehl?

Jun 28 2018

Ich bin auf einen Befehl gestoßen, der gerade unten gegeben wurde -

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

Soweit ich das beurteilen kann, wird es wahrscheinlich zum Festschreiben der Änderungen in .bash_profile verwendet, aber wofür genau wird es verwendet?

Antworten

31 kai-dj Jun 28 2018 at 12:06

Es leitet die Standardausgabe des Programms vorher um >>und hängt sie danach an die angegebene Datei an.

48 slhck Jun 28 2018 at 14:13

Kurze Antwort - was macht >>das?

Mit >>hängen Sie die Ausgabe eines Befehls an eine Datei an.

Ihr Beispielbefehl besteht im Wesentlichen aus mehreren Teilen:

Befehl >> Dateiname

Die Ausgabe von commandwürde also angehängt filename.


Was passiert im konkreten Fall von echo?

In Ihrem speziellen Fall gibt der echo "…"Befehl seine Eingabeargumente an "stdout" aus, den sogenannten "Standardausgabedeskriptor". Auf die Eingabeargumente echofolgt ein Zeilenumbruch ( \n), sodass Sie einen Zeilenumbruch erhalten.

Hier ist ein „Standardausgabedeskriptor“ nichts anderes als ein Ausgabestream, der in Ihrer Shell angezeigt wird, wenn Sie einen Befehl ausführen. (Wenn Sie also echo foodie Eingabetaste eingeben und drücken , foo\nwird die tatsächliche Ausgabe des echoBefehls angezeigt, die von Ihrer Shell foogefolgt von einer neuen Zeile angezeigt wird.)

Grundsätzlich verwendet alles, was in Ihre Befehlszeile schreibt, stdout. Es gibt auch einen anderen Deskriptor namens "stderr", der normalerweise für Fehlermeldungen verwendet wird. Es wird auch wie Standard gedruckt, so dass sie manchmal eingestreut werden können. Und es gibt einen Standarddeskriptor, der für die Eingabe verwendet wird. Weitere Informationen finden Sie in diesem Artikel .

Wie leiten Sie die Ausgabe in der Shell um?

Sie können stdout jederzeit zu einem Dateideskriptor umleiten , was Sie mit einem der folgenden Operatoren tun können:

  • >leitet zu einem Dateideskriptor weiter. Es erstellt die Datei, wenn sie nicht vorhanden ist, oder schneidet die Datei vor dem Schreiben ab, falls sie bereits vorhanden ist. Die Datei wird daher mit stdout überschrieben.

  • >>wird an einen Dateideskriptor angehängt. Es erstellt die Datei, wenn sie nicht vorhanden ist.

Sie können stderr auch mithilfe von 2>oder 2>>auf ähnliche Weise umleiten . Oder Sie können stderr und stdout in einer Datei kombinieren: 2>&1macht das. Weitere Informationen zur Umleitung und einige weitere Beispiele finden Sie in diesem kleinen Tutorial .

Wie kann ich herausfinden, was ein bestimmter Shell-Code bedeutet?

Im Allgemeinen sollten Sie versuchen explainshell.com , die Ihnen visuelle Führung und Informationen über einen bestimmten Shell - Befehl geben.

7 MarkBoyce Jun 29 2018 at 09:58

Für die TLDR- Leute, die nur ein Beispiel sehen möchten ;

Die Standardausgabe (keine Fehler) des Befehls vor dem >> wird am Ende der nach ihm benannten Datei hinzugefügt.

Wenn also die Datei "flintstones.txt" enthält;

Fred
Barney

echo Dino >> flintstones.txt führt dazu, dass 'Dino' am Ende der Datei hinzugefügt wird.

Fred
Barney
Dino