GNU/Linux >> Linux Esercitazione >  >> Linux

Io reindirizzamento e il comando principale?

Stavo cercando di modificare rapidamente un .hgignore file dalla shell bash di Cygwin oggi e ho aggiunto una riga che era un errore. Non sono sicuro che questo fosse il modo migliore per farlo, ma ho subito pensato di usare head -1 .hgignore per rimuovere la riga incriminata (in precedenza avevo avuto solo una riga nel file). Abbastanza sicuro, quando eseguito fornisce la prima riga come unico output.

Ma quando ho provato a reindirizzare l'output e riscrivere il file usando head -1 .hgignore > .hgignore , il file era vuoto. Perché questo accade? Se invece provo ad aggiungere, head -1 .hgignore >> .hgignore , si aggiunge correttamente ma questo ovviamente non è il risultato desiderato. Perché un reindirizzamento di troncamento non funziona in questo caso?

Risposta accettata:

Quando la shell riceve una riga di comando come:command > file.out la shell stessa apre (e forse crea) il file chiamato file.out . La shell imposta il descrittore di file 0 sul descrittore di file di file ottenuto dall'apertura. Ecco come funziona il reindirizzamento I/O:ogni processo conosce i descrittori di file 0, 1 e 2.

La parte difficile di questo è come per aprire file.out . La maggior parte delle volte, vuoi file.out aperto per la scrittura all'offset 0 (cioè troncato) e questo è ciò che la shell ha fatto per te. Ha troncato .hgignore, lo ha aperto per la scrittura, ha duplicato il descrittore di file su 0, quindi ha eseguito head . File clobbering istantaneo.

In bash shell, esegui un set noclobber per modificare questo comportamento.


Linux
  1. Copia e incolla nella riga di comando di Linux con xclip

  2. Lavorare con l'output di input e il reindirizzamento degli errori in Linux

  3. $_ Vs!$. Ultimo argomento del comando precedente e reindirizzamento dell'output?

  4. Reindirizzamento allo stesso file del file di origine elaborato dal comando?

  5. 5 esempi pratici di comando principale in Linux

Come utilizzare il comando head di Linux

8 Esempi di comandi principali in Linux

Come usare Sudo e il file Sudoers

7 modi per usare il comando Linux Head

La differenza tra più, meno e la maggior parte dei comandi

Il comando ln in Linux:crea collegamenti soft e hard