Was bedeutet ">>" im Terminalbefehl?

5797
monster

Ich bin gerade auf einen Befehl gestoßen -

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

Von was ich vermuten kann, wird es wahrscheinlich für das Festschreiben der Änderungen in .bash_profile verwendet, aber wozu wird es genau verwendet?

11
Nur um Sie wissen zu lassen, was Sie in Zukunft verbessern können: `man bash` ist mit einer ziemlich formalen Sprache geschrieben, es kann schwer zu verstehen sein. Auf der anderen Seite gibt der Ausdruck "bash >>" einige nützliche Links in Google zurück. Es ist wahr, wir wollen Wissen zusammenfassen, ohne auf Google angewiesen zu sein. Aus diesem Grund kann sogar eine Frage mit leicht durchsuchbarer Antwort passen. Der Umstand, dass Sie die Antwort nicht sofort gegeben haben (siehe [* kann ich meine eigene Frage beantworten? *] (Https://superuser.com/help/self-answer)), oder auf vorhandene Ressourcen verweisen (die möglicherweise Hilfe benötigen) zu verstehen) weist auf mangelnde Forschung hin. Kamil Maciorowski vor 5 Jahren 26
Eine ausführliche Übersicht über die Befehlszeilenumleitungsoperatoren finden Sie unter https://unix.stackexchange.com/q/159513/85039 Sergiy Kolodyazhnyy vor 5 Jahren 5

4 Antworten auf die Frage

48
slhck

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 werden filename.


Was passiert im konkreten Fall von echo?

In Ihrem speziellen Fall gibt der echo "…"Befehl seine Eingabeargumente an "stdout" aus, den sogenannten "Standard-Ausgabedeskriptor". Auf die Eingabeargumente bis echofolgt eine newline ( \n), sodass Sie einen Zeilenumbruch erhalten.

Ein "Standard-Ausgabedeskriptor" ist hier nichts weiter als ein Ausgabestrom, der in Ihrer Shell angezeigt wird, wenn Sie einen Befehl ausführen. (Wenn Sie also echo foodie Eingabetaste drücken und die Eingabetaste drücken, foo\nhandelt es sich um die tatsächliche Ausgabe des echoBefehls, die von Ihrer Shell als fooFolge 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, sodass sie manchmal durchsetzt werden könnten. Und es gibt einen Standard-Deskriptor, 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, den Sie mit einem dieser Operatoren ausführen können:

  • >leitet auf einen Dateideskriptor um. Die Datei wird erstellt, wenn sie nicht vorhanden ist, oder, falls bereits vorhanden, die Datei vor dem Schreiben abgeschnitten. Die Datei wird daher mit stdout überschrieben.

  • >>hängt an einem Dateideskriptor an. Die Datei wird erstellt, wenn sie nicht vorhanden ist.

Sie können stderr auch mit 2>oder 2>>auf ähnliche Weise umleiten . Oder Sie können stderr und stdout in einer Datei kombinieren 2>&1. Weitere Informationen zur Weiterleitung und weitere Beispiele finden Sie in diesem kleinen Tutorial .

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

In der Regel möchten Sie vielleicht erklären, hell.com, wo Sie visuelle Anleitungen und Informationen zu einem bestimmten Shell-Befehl erhalten.

31
kai-dj

Er leitet das stdout des Programms vorher um >>und hängt es anschließend an die angegebene Datei an.

"Programm vorher" Was bedeutet das? Befehl natürlich, aber Umleitungen können auch vorangestellt werden, z. B. ">> file command" rexkogitans vor 5 Jahren 28
Ein Beispiel. Auf Ubuntu 18.04 könnte ich "apt search rust >> x" eingeben. Der Teil "apt search rust" sucht nach verfügbaren Paketen nach dem Begriff "Rust" und sendet diese dann an den Standard (normalerweise das Terminal in diesem Fall). Das ">> x" gibt jedoch an, die Ausgabe an das Ende der Datei "x" umzuleiten. Wenn ich nur die Datei ersetzen wollte, würde ich nur ein einzelnes ">" benötigen. NomadMaker vor 5 Jahren 0
@rexkogitans Auch in der Mitte des Befehls vorbei, wenn Sie den Code zum Lesen verwirrend machen möchten. `echo ab >> cd` fügt` abd` an eine Datei mit dem Namen 'c' an. kasperd vor 5 Jahren 0
@kasperd Sie können außerdem die stdin-Umleitung in beliebiger Reihenfolge zusätzlich streuen. rexkogitans vor 5 Jahren 0
7
Mark Boyce

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

Die Standardausgabe (nicht 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 
Ich würde empfehlen, dass Sie ein Beispiel für `echo Dino> flintstones.txt 'hinzufügen, um anzuzeigen, dass der Inhalt einfach' Dino 'wäre, wenn Sie mit einem einzigen Rechtspfeil ausgeführt werden. JakeGould vor 5 Jahren 0
-2
rocksyne

Wieder, wenn du es tust

> somefile.txt 

Der gesamte Inhalt der Datei wird gelöscht.

Warum kopierst du eine andere Antwort? Toto vor 5 Jahren 0
@Toto Ich glaube nicht, dass er es tut. Es scheint zusätzlich und sehr wertvoll zu sein. Volker Siegel vor 5 Jahren 0
@Toto Oops! Bei näherem Hinsehen ist das eigentlich nicht der Fall. Falsch auch in mehrfacher Hinsicht. Seltsam - er ist neu hier, aber anderswo aktiv - also wahrscheinlich nicht nur Trolling. Volker Siegel vor 5 Jahren 0
@VolkerSiegel: `> file` löscht die Datei, aber` >> file` macht nichts. Toto vor 5 Jahren 2
Aber dies beantwortet die Frage in keiner Weise und sollte ein Kommentar sein phuclv vor 5 Jahren 0
@Toto. Zuerst tut es mir leid, wenn Sie sich durch meine Antwort beleidigt fühlen. Und ja, du hast recht, ich bin neu hier. Ich habe diese Frage in einem Thread gesehen und dachte: "Oh, lass mich dieser Person helfen" und ich denke, das ist der Grund, warum diese Plattform existiert. Zum Teilen. Und wenn Sie glauben, ich kopiere die Antwort von jemandem, dann sagen Sie mir, welche von ihnen so einfach und geradlinig aussieht wie meine. Also habe ich einen Tippfehler gemacht, ein weiteres> zu> hinzuzufügen, das ich korrigiert habe. Also, was ist das Spiel? Ich nehme das nicht persönlich. Ich möchte nur, dass Sie zuerst wissen, dass dieser Ort dazu dient, nicht zu schlagen. Prost! rocksyne vor 5 Jahren 0