Deskriptor souboru shellového skriptu

Intro

Někdy v shellu vidíme příkazy jako tento:

  • $ ls foo > /dev/null 2>&1

Poprvé může být obtížné pochopit, co to dělá, proto to v této poznámce stručně vysvětlíme.

Přesměrování I/O

Předpokládejme, že nyní máte jednoduchý textový soubor:

Ajednoduchý textový soubor.

Nyní přesměrujte obsah tohoto souboru na jiné místo:

Přesměrování obsahu souboru.

Ve výše uvedené akci přesměrování se na terminálu nezobrazí žádný výstup, protože příkaz > přesměruje obsah souboru test.txt do souboru.output.txt, což je standardní výstup (stdout).

Na rozdíl od standardního výstupu existuje standardní chyba (stdr), např.

V průběhu došlo k chybě.6082>Při procesu přesměrování došlo k chybě.

Při procesu přesměrování došlo k chybě, protože v níže uvedeném adresáři není žádný soubor s názvem no_such_file.txt. V tomto případě, přestože je použit příkaz >, není možné zapsat obsah do souboru output.txt, protože není k dispozici obsah stdout, ale chybové hlášení stderror.

Deskriptor souboru

Deskriptor souboru si lze představit jako kladné celé číslo otevřeného souboru. Pokud máte 100 otevřených souborů, máte v podstatě 100 odpovídajících deskriptorů souborů.

V systémech typu Unix/Unix existují také deskriptory souborů určené pro stdout a stderr, které, aby bylo jasno, mají vyhrazená místa určení pro výstup těchto souborů.pro tyto výstupní cíle:

  • 1: pro stdout
  • 2: pro stderr

Složení všeho dohromady

Podle výše uvedeného konceptu, pokud chcete zapsat obsah známého souboru do jiného souboru, můžete tak učinit.

Přesměrování obsahu souboru do jiného umístění prostřednictvím.stdout.

Jednička na této straně představuje stdout, jehož syntaxe je reprezentována jako:

  • >

Takže když vidíte, že někdo píše from.foo > to.bar, je to prostě vynechání.

Podobně můžete přesměrovat stderr takto:

Přesměrování chybové zprávy na jiné místo přes stderr.

Pokud chcete přesměrovat jak stdout, tak stderr na stejné místo určení, můžete to udělat takto.

Přesměrování stderr na stejné místo jako stdout.
.

  • &1 se používá jako odkaz na deskriptor souboru s id 1, tj. odkaz na stdout.
  • 2>&1 znamená přesměrování obsahu stderr na stdout.

Souhrn

  • Obvykle existují dvě místa určení výstupu: stdout a stderr.
  • Výstup můžeme nasměrovat na různá místa, ale obvykle do souboru.
  • Deskriptor souboru lze použít k rozlišení mezi stdout (1) a stderr (2).
  • příkaz > output_location je ve skutečnosti zkratkou příkazu 1> output_location.
  • Pro odkazování na jiné deskriptory souborů můžeme použít &

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.