Was bedeutet ">>" im Terminalbefehl?

14

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?

Monster-
quelle
26
Nur um Ihnen mitzuteilen, was Sie in Zukunft verbessern können: Es man bashist in einer recht formalen Sprache geschrieben und möglicherweise schwer zu verstehen. Andererseits gibt der Ausdruck nur bash >>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.
Kamil Maciorowski
5
Eine detaillierte Übersicht über die Befehlszeilenumleitungsoperatoren finden Sie unter unix.stackexchange.com/q/159513/85039
Sergiy Kolodyazhnyy

Antworten:

31

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

kai-dj
quelle
28
"Programm vor" Was bedeutet das? Befehl offensichtlich, aber Weiterleitungen können auch vorangestellt werden, dh>> file command
rexkogitans
Ein Beispiel. Unter Ubuntu 18.04 könnte ich "apt search rust >> x" eingeben. Der Teil "apt search rust" durchsucht verfügbare Pakete nach dem Begriff rust und sendet diese dann an standard out (normalerweise das Terminal in diesem Fall). Das ">> x" sagt jedoch, dass die Ausgabe an das Ende der Datei "x" umgeleitet werden soll. Wenn ich nur die Datei ersetzen wollte, würde ich nur ein einziges ">" benötigen.
NomadMaker
@rexkogitans Selbst in der Mitte des Befehls, wenn Sie Ihren Code beim Lesen verwirrend machen möchten. echo a b >> c dwürde a b dan eine Datei mit dem Namen anhängen c.
Kasperd
@kasperd Sie können die stdin-Umleitung auch in beliebiger Reihenfolge dazwischen streuen.
Rexkogitans
48

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

slhck
quelle
7

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
Mark Boyce
quelle
Ich würde empfehlen, dass Sie ein Beispiel hinzufügen echo Dino > flintstones.txt, um den Inhalt anzuzeigen. Dies wäre einfach, Dinowenn Sie einen einzelnen Rechtspfeil verwenden.
JakeGould
-2

Wieder wenn du es tust

> somefile.txt

Der gesamte Inhalt der Datei wird gelöscht.

Rocksyne
quelle
Warum kopierst du andere Antworten?
Toto
@Toto Ich glaube nicht, dass er es tut. Es scheint zusätzlich und sehr wertvoll zu sein.
Volker Siegel
@Toto Ups! Bei näherer Betrachtung ist dies eigentlich nicht der Fall. Auch in mehrfacher Hinsicht falsch. Seltsam - er ist neu hier, aber anderswo aktiv - also wahrscheinlich nicht nur Trolling.
Volker Siegel
2
@VolkerSiegel: > filelöscht die Datei, >> filemacht aber nichts.
Toto
aber dies beantwortet die Frage in keiner Weise und sollte ein Kommentar sein
phuclv