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?
command-line
bash
terminal
.bash-profile
Monster-
quelle
quelle
man bash
ist in einer recht formalen Sprache geschrieben und möglicherweise schwer zu verstehen. Andererseits gibt der Ausdruck nurbash >>
wenige nützliche Links in Google zurück. Es ist wahr, wir möchten Wissen sammeln, ohne uns auf Google verlassen zu müssen. Aus diesem Grund kann sogar eine Frage mit leicht durchsuchbarer Antwort passen. Die Tatsache, dass Sie die Antwort weder sofort gegeben haben (siehe Kann ich meine eigene Frage beantworten? ) Noch auf vorhandene Ressourcen hingewiesen haben (für deren Verständnis Sie möglicherweise Hilfe benötigen), weist auf einen Mangel an Forschung hin.Antworten:
Es leitet die Standardausgabe des Programms vorher um
>>
und hängt sie danach an die angegebene Datei an.quelle
>> file command
echo a b >> c d
würdea b d
an eine Datei mit dem Namen anhängenc
.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:
Die Ausgabe von
command
würde also angehängtfilename
.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 Eingabeargumenteecho
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 desecho
Befehls angezeigt, die von Ihrer Shellfoo
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 stdout 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 mit
2>
oder2>>
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.
quelle
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;
echo Dino >> flintstones.txt
führt dazu, dass 'Dino' am Ende der Datei hinzugefügt wird.quelle
echo Dino > flintstones.txt
, um den Inhalt anzuzeigen. Dies wäre einfach,Dino
wenn Sie einen einzelnen Rechtspfeil verwenden.Wieder wenn du es tust
Der gesamte Inhalt der Datei wird gelöscht.
quelle
> file
löscht die Datei,>> file
macht aber nichts.