GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Io-Umleitung und der Head-Befehl?

Ich habe versucht, schnell eine .hgignore zu bearbeiten Datei aus der Cygwin-Bash-Shell, und ich habe eine Zeile hinzugefügt, die ein Fehler war. Ich bin mir nicht sicher, ob dies der beste Weg war, aber ich dachte schnell daran, head -1 .hgignore zu verwenden um die störende Zeile zu entfernen (ich hatte zuvor nur eine Zeile in der Datei). Sicher genug, wenn es ausgeführt wird, gibt es die erste Zeile als einzige Ausgabe.

Aber als ich versuchte, die Ausgabe umzuleiten und die Datei mit head -1 .hgignore > .hgignore neu zu schreiben , die Datei war leer. Warum passiert das? Wenn ich stattdessen versuche, anzuhängen, head -1 .hgignore >> .hgignore , es wird korrekt angehängt, aber das ist offensichtlich nicht das gewünschte Ergebnis. Warum funktioniert eine abgeschnittene Weiterleitung in diesem Fall nicht?

Akzeptierte Antwort:

Wenn die Shell eine Befehlszeile erhält wie:command > file.out die Shell selbst öffnet (und erstellt möglicherweise) die Datei mit dem Namen file.out . Die Shell setzt den Dateideskriptor 0 auf den Dateidateideskriptor, den sie von open erhalten hat. So funktioniert die E/A-Umleitung:Jeder Prozess kennt die Dateideskriptoren 0, 1 und 2.

Der schwierige Teil dabei ist wie um file.out zu öffnen . Meistens möchten Sie file.out zum Schreiben bei Offset 0 geöffnet (d. h. abgeschnitten) und das hat die Shell für Sie getan. Es hat .hgignore abgeschnitten, zum Schreiben geöffnet, den Dateideskriptor auf 0 gesetzt und dann head ausgeführt . Sofortiges Datei-Clobbing.

In der Bash-Shell führen Sie ein set noclobber durch um dieses Verhalten zu ändern.


Linux
  1. Pipes und Redirection in Linux - erklärt!

  2. head-Befehlsbeispiele in Linux

  3. Wie hängt man die Ausgabe an eine Datei an?

  4. Speichern Sie die Ausgabe von date und watch in einer Datei

  5. Wie lautet der Befehl zum Kopieren, Lesen und Entfernen von Dateien unter Linux

So verwenden Sie den Linux-Kopfbefehl

8 Head-Befehlsbeispiele in Linux

So verwenden Sie Sudo und die Sudoers-Datei

7 Möglichkeiten, den Linux Head-Befehl zu verwenden

Der Unterschied zwischen mehr, weniger und den meisten Befehlen

Der ln-Befehl unter Linux:Soft- und Hardlinks erstellen