File Descriptor van Shell Script

Intro

Soms zien we commando’s als deze in de shell:

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

Het is misschien moeilijk te begrijpen wat dit doet voor de eerste keer, dus deze nota zal het kort uitleggen.

I/O Redirection

Stel dat u nu een eenvoudig tekstbestand hebt:

Aeenvoudig tekstbestand.

Nu de inhoud van dit bestand omleiden naar een andere locatie:

Leidt de inhoud van het bestand om.

In de bovenstaande omleidingsactie zien we geen uitvoer op de terminal, omdat het >-commando de inhoud van test.txt omleidt naaroutput.txt, dat is een standaard output (stdout).

In tegenstelling tot standaard output, is er standaard error (stdr), b.v.

Er is een fout opgetreden tijdens6082>Er is een fout opgetreden tijdens het doorstuurproces.

Er is een fout opgetreden tijdens het doorstuurproces omdat er geen bestand met de naam no_such_file.txt in de huidige map staat. In dit geval is het, ook al wordt het > commando gebruikt, niet mogelijk om de inhoud in output.txt in te voeren, omdat er geen stdout is, maar een foutmelding van stderror in de plaats komt.

File Descriptor

File descriptor kan worden gezien als een positief geheel getal voor een open bestand. Als je 100 open bestanden hebt, heb je in principe 100 corresponderende file descriptors.

In Unix/Unix-achtige systemen, zijn er ook file descriptors gewijd aan stdout en stderr, die, om duidelijk te zijn, speciale bestemmingen hebben voor de uitvoer van dezevoor deze uitvoerbestemmingen:

  • 1: voor stdout
  • 2: voor stderr

Het geheel samenvoegen

Volgens het bovenstaande concept, als u de inhoud van een bekend bestand naar een ander bestand wilt schrijven, kunt u dat doen

Bestandsinhoud omleiden naar een andere locatie viastdout.

De 1 aan deze kant staat voor stdout, waarvan de syntaxis wordt weergegeven als:

  • >

Dus als je iemand ziet schrijven van.foo > naar.bar, dan laat hij gewoon de

Ook om stderr om te leiden kunt u dit doen:

Foutbericht omleiden naar een andere locatie via stderr.

Als u zowel stdout als stderr naar dezelfde bestemming wilt omleiden, kunt u dat doen

Redirect stderr naar dezelfde locatie als stdout.
  • &1 wordt gebruikt als verwijzing naar een bestandsdescriptor-id van 1, d.w.z. een verwijzing naar stdout.
  • 2>&1 betekent dat de inhoud van stderr wordt omgeleid naar stdout.

Summary

  • Er zijn gewoonlijk twee bestemmingen voor de uitvoer: stdout en stderr.
  • We kunnen de uitvoer naar verschillende plaatsen sturen, maar gewoonlijk naar een bestand.
  • File descriptor kan worden gebruikt om onderscheid te maken tussen stdout (1) en stderr (2).
  • commando > output_location is eigenlijk een afkorting van commando 1> output_location.
  • We kunnen & gebruiken om naar andere file descriptors te verwijzen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.