Filbeskrivelse af shellscript

Intro

Sommetider ser vi kommandoer som denne i shell’en:

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

Det kan være svært at forstå, hvad dette gør for første gang, så denne note vil forklare det kort.

I/O Redirection

Sæt, at du nu har en simpel tekstfil:

Asimpel tekstfil.

Opnå nu at omdirigere indholdet af denne fil til et andet sted:

Omdiriger indholdet af filen.

I ovenstående omdirigering kan vi ikke se noget output på terminalen, fordi >-kommandoen omdirigerer indholdet af test.txt tiloutput.txt, som er en standardudgang (stdout).

I modsætning til standard output er der standard error (stdr), f.eks.

En fejl opstod under6082>En fejl opstod under viderestillingsprocessen.

En fejl opstod under viderestillingsprocessen, fordi der ikke findes nogen fil med navnet no_such_file.txt i den aktuelle mappe. I dette tilfælde er det ikke muligt at indtaste indholdet i output.txt, selv om kommandoen > anvendes, fordi der ikke er noget stdout-indhold, men i stedet en fejlmeddelelse i stderror.

Fildeskriptor

Fildeskriptor kan opfattes som et positivt heltal for en åben fil. Hvis du har 100 åbne filer, har du i princippet 100 tilsvarende fildeskriptorer.

I Unix/Unix-lignende systemer er der også fildeskriptorer dedikeret til stdout og stderr, som, for at være helt klar, har dedikerede destinationer for output af dissefor disse output destinationer:

  • 1: for stdout
  • 2: for stderr

Sammenlægning af alle sammen

I henhold til ovenstående koncept, hvis du ønsker at skrive indholdet af en kendt fil til en anden fil, kan du gøre det

Omdiriger filindholdet til en anden placering viastdout.

1’eren på denne side repræsenterer stdout, hvis syntaks er repræsenteret som:

  • >

Så når du ser nogen skrive from.foo > to.bar, er det bare at undlade at skrive

Sådan kan du også omdirigere stderr på følgende måde:

Omdiriger fejlmeddelelsen til et andet sted via stderr.

Hvis du ønsker at omdirigere både stdout og stderr til den samme destination, kan du gøre dette

Omdiriger stderr til den samme placering som stdout.
  • &1 bruges som en henvisning til et fildeskriptor-id på 1, dvs. en henvisning til stdout.
  • 2>&1 betyder, at indholdet af stderr omdirigeres til stdout.

Summary

  • Der er normalt to destinationer for output: stdout og stderr.
  • Vi kan dirigere output til forskellige steder, men normalt til en fil.
  • Fildeskriptor kan bruges til at skelne mellem stdout (1) og stderr (2).
  • kommando > output_location er faktisk en forkortelse af kommando 1> output_location.
  • Vi kan bruge & til at henvise til andre fildeskriptorer.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.