GNU/Linux >> Znalost Linux >  >> Linux

Io Redirection and the Head Command?

Snažil jsem se rychle upravit .hgignore soubor z Cygwin bash shellu dnes a přidal jsem řádek, který byl chybou. Nejsem si jistý, jestli to byl nejlepší způsob, jak to udělat, ale rychle mě napadlo použít head -1 .hgignore odstranit problematický řádek (dříve jsem měl v souboru pouze jeden řádek). Jistě, když je spuštěn, dává první řádek jako jediný výstup.

Ale když jsem se pokusil přesměrovat výstup a přepsat soubor pomocí head -1 .hgignore > .hgignore , soubor byl prázdný. proč se to děje? Pokud se místo toho pokusím přidat, head -1 .hgignore >> .hgignore , připojí se správně, ale to zjevně není požadovaný výsledek. Proč v tomto případě nefunguje zkrácené přesměrování?

Přijatá odpověď:

Když shell dostane příkazový řádek jako:command > file.out samotný shell otevře (a možná vytvoří) soubor s názvem file.out . Shell nastaví deskriptor souboru 0 na deskriptor souboru souboru, který získal z otevřeného prostředí. Takto funguje přesměrování I/O:každý proces zná deskriptory souborů 0, 1 a 2.

Nejtěžší na tom je, jak otevřete file.out . Většinou chcete file.out otevřeno pro zápis s offsetem 0 (tj. zkráceno) a to je to, co shell udělal za vás. Zkrátil .hgignore, otevřel jej pro zápis, zkopíroval deskriptor souboru na 0 a poté spustil head . Okamžité clobování souborů.

V bash shellu provedete set noclobber změnit toto chování.


Linux
  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Práce s Input Output a přesměrováním chyb v Linuxu

  3. Pipes a přesměrování v Linuxu – vysvětleno!

  1. Jak připojit výstup do souboru?

  2. unix - hlava A konec souboru

  3. Uložte výstup příkazu data a watch do souboru

  1. Zkopírujte a vložte na příkazový řádek Linuxu pomocí xclip

  2. Přesměrovat na stejný soubor jako zdrojový soubor zpracovaný příkazem?

  3. Jaký je příkaz pro kopírování, čtení a odstraňování souboru v linuxu