Was bedeutet ">>" im Terminalbefehl?
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
Es leitet die Standardausgabe des Programms vorher um >>
und hängt sie danach an die angegebene Datei an.
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 command
wü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 echo
folgt 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 foo
die Eingabetaste eingeben und drücken , foo\n
wird die tatsächliche Ausgabe des echo
Befehls angezeigt, die von Ihrer Shell foo
gefolgt 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>&1
macht 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.
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