Filbeskrivning av skalskript

Intro

Ibland ser vi kommandon som detta i skalet:

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

Det kan vara svårt att förstå vad detta gör för första gången, så den här anteckningen kommer att förklara det kortfattat.

I/O Redirection

Antag att du nu har en enkel textfil:

A

Omdirigera nu innehållet i denna fil till en annan plats:

Omdirigera innehållet i filen.

I omdirigeringsåtgärden ovan ser vi inget utdata som visas på terminalen, eftersom kommandot > omdirigerar innehållet i test.txt tilloutput.txt, som är en standardutgång (stdout).

I motsats till standardutgång finns standardfel (stdr), t.ex.

Ett fel uppstod under6082>Ett fel inträffade under omdirigeringen.

Ett fel inträffade under omdirigeringen eftersom det inte finns någon fil med namnet no_such_file.txt i den aktuella katalogen. I det här fallet är det, trots att kommandot > används, inte möjligt att skriva in innehållet i output.txt, eftersom det inte finns något stdout-innehåll, utan istället ett felmeddelande i stderror.

Filbeskrivare

Filbeskrivare kan ses som ett positivt heltal för en öppen fil. Om du har 100 öppna filer har du i princip 100 motsvarande filbeskrivare.

I Unix/Unix-liknande system finns det också filbeskrivare som är dedikerade till stdout och stderr, vilka, för att vara tydlig, har dedikerade destinationer för utdata från dessaför dessa utdatadestinationer:

  • 1: för stdout
  • 2: för stderr

Sammanfogning av allting

Enligt konceptet ovan, om du vill skriva innehållet i en känd fil till en annan fil, kan du göra så här

Omdirigera filinnehåll till en annan plats viastdout.

1:an på den här sidan representerar stdout, vars syntax representeras som:

  • >

Så när du ser någon skriva from.foo > to.bar, så utelämnar den bara

För att omdirigera stderr kan du göra så här:

Omdirigera felmeddelande till en annan plats via stderr.

Om du vill omdirigera både stdout och stderr till samma destination kan du göra så här

Omdirigera stderr till samma plats som stdout.
  • &1 används som en referens till en filbeskrivare med id 1, dvs. en referens till stdout.
  • 2>&1 innebär att innehållet i stderr omdirigeras till stdout.

Summary

  • Det finns vanligtvis två destinationer för utdata: stdout och stderr.
  • Vi kan styra utdata till olika platser, men vanligtvis till en fil.
  • Filbeskrivning kan användas för att skilja mellan stdout (1) och stderr (2).
  • kommando > output_location är egentligen en förkortning av kommando 1> output_location.
  • Vi kan använda & för att hänvisa till andra filbeskrivare.

Lämna ett svar

Din e-postadress kommer inte publiceras.