Was ist der Unterschied zwischen ">" und ">>"?

11

Was ist der Unterschied zwischen ls >und ls >>? Ich muss das für mein GCSE-Computing verstehen, weiß aber nicht, was der Unterschied ist.

Helen Schofield
quelle
1
Zusätzlich zu der netten Antwort unten finden Sie die zweite (und am besten bewertete) Antwort auf stackoverflow.com/a/984761/1841533: Wenn Sie >> verwenden, um in eine Datei zu schreiben (z. B. ein Protokoll), hat dies auch den netten Nebeneffekt Es werden keine "Nul" -Zeichen am Anfang der saif-Datei angezeigt, wenn die Datei abgeschnitten wird, während der Prozess noch darauf schreibt! (Beispiel: während der Rotation der Protokolldatei). Da "foo> file" nicht sucht, bemerkt es die Größenänderung nicht und zeigt immer noch weiter als bis zum Anfang, und das Betriebssystem füllt sich mit Nul. foo >> file sucht und zeigt daher auf die neue Position (den Anfang).
Olivier Dulac
Da dies eine pädagogische Frage ist, empfehle ich, dass Sie lernen, mit der entsprechenden Dokumentation zu arbeiten: Bash-Referenzhandbuch, Abschnitt „Weiterleitungen“ (auch zugänglich über man bash).
David Foerster

Antworten:

27

>& >>sind Umleitungsoperatoren; Sie übertragen die Ausgabe von etwas, in diesem Fall ls, an einen anderen Ort. Wenn diese Ausgabe in eine Datei geht, >wird die Datei abgeschnitten - dh alle vorherigen Inhalte werden gelöscht, während >>neue Daten an das Ende der Datei angehängt werden, wobei der vorherige Inhalt erhalten bleibt. Dies funktioniert mit jeder Eingabe, sodass echo& catbeispielsweise auch auf diese Weise verwendet werden kann.

Interessant ist auch der |Betreiber, der die Daten an eine andere Anwendung weitergibt - so erhalten ls | cat -nSie eine zeilennummerierte Auflistung!

Pipes ist der relevante Begriff.

Mark Williams
quelle
2
Abschneiden oder überschreiben?
DK Bose
2
@DKBose von straceAusgang für bash -c 'echo a > blah': open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666), so gestutzt wäre der richtige Begriff sein.
muru
"Pipes" und auch "Ausgabeumleitung", die Sie in Ihrer Antwort verwendet haben. Gut gemacht.
0xSheepdog
gefunden, was ich gemeint habe: Zusätzlich zu dieser netten Antwort finden Sie in der zweiten (und am besten bewerteten) Antwort auf stackoverflow.com/a/984761/1841533 : Verwenden >>zum Schreiben in eine Datei (z. B. ein Protokoll) hat auch die nette Seite bewirkt, dass am Anfang der saif-Datei keine "Nul" -Zeichen erscheinen, wenn die Datei abgeschnitten wird, während der Prozess noch darauf schreibt! (Beispiel: während der Rotation der Protokolldatei). Da "foo> file" nicht sucht, bemerkt es die Größenänderung nicht und zeigt immer noch weiter als bis zum Anfang, und das Betriebssystem füllt sich mit Nul. foo >>filesucht und zeigt daher auf die neue Position (den Anfang).
Olivier Dulac
5

Die Symbole >und >>werden verwendet, um die Ausgabe in eine Datei umzuleiten.

Beide erstellen die Datei, wenn sie nicht existiert. Wenn die Datei bereits vorhanden ist, >wird die Datei überschrieben, wobei >>die Daten an die Datei angehängt werden.

So ls > myfilewird ein Dokument mit dem Namen erstellt, myfilewenn es nicht vorhanden ist. Wenn myfilees bereits vorhanden ist und Daten enthält, werden diese mit den neuen Daten, die Sie übergeben, überschrieben.

Wobei ls >> myfileeine Datei erstellt, wenn sie nicht existiert, und Daten darauf schreibt. Wenn die Datei mit einigen Daten vorhanden ist, werden an ihrem Ende neue Daten hinzugefügt.

Sudheer
quelle
0

WENN Sie ein einzelnes> verwenden, wird die Datei überschrieben, falls sie bereits vorhanden ist. Seien Sie sehr vorsichtig, wenn Sie diesen verwenden.

Wenn Sie zwei >> verwenden, wird es nur angehängt (mit anderen Worten, schreiben Sie am Ende der Datei), wenn es bereits vorhanden ist. Andernfalls wird eine neue Datei erstellt, falls sie nicht vorhanden ist.

Eric Larson
quelle
1
Warum eine bereits gegebene Antwort wiederholen?
Requist