I/O-omdirigering

I/O-omdirigering  är förmågan hos kommandoskalet i vissa operativsystem att omdirigera standardströmmar till en användardefinierad plats, till exempel en fil. Karakteristiskt för Unix-liknande operativsystem , men implementerat i varierande grad i operativsystem från andra familjer.

Omdirigering av standardutgångsströmmar

Omdirigering görs vanligtvis genom att infoga specialtecknet > mellan kommandon.
Vanligtvis ser syntaxen ut så här: kommando1 > fil1 - kör kommando1 och sätter standardutdata i fil1 ; kommando1 < fil1 utför kommando1 med fil1 som indata (istället för tangentbordet ).
För varje inmatningsförfrågan läser programmet en rad text från filen. Konstruktionskommandot1 < fil1 > fil2 kombinerar de två föregående alternativen: exekverar kommando1 inmatning från fil1 och utmatning till fil2 .

Transportörer

Pipelines  är förmågan hos flera program att arbeta tillsammans, när utdata från ett program direkt går till ingången av ett annat utan användning av mellanliggande temporära filer . Syntax: kommando1 | kommando2 kör kommando1 med dess utdata som indata när kommando2 körs , vilket är samma sak som att använda två omdirigeringar och en temporär fil:

kommando1 > temporär fil kommando2 < Tempfil rm TempFile

Ett bra exempel på kommandopipelines är att kombinera eko med ett annat kommando för att få interaktivitet i icke-interaktiva miljöer, till exempel:

echo -e "Användarnamn\nLösenord" | ftp localhost

Detta startar en ftp- klient som ansluter till den lokala värden ( localhost ). På begäran av programmet anger det första raden Användarnamn , och vid nästa inmatningsbegäran läser det raden Lösenord . Raderna i ekokommandot är åtskilda av \n .

Omdirigering från standardfilbeskrivningar

I det Bourne-skal -härledda Unix -skalet kan de två föregående stegen förbättras genom att lägga till ett nummer ( fildeskriptor ) omedelbart före omdirigeringstecknet. Detta nummer anger vilken ström som används för omdirigeringen. Unix har följande standardin-/utgångsströmmar:

Beskrivare namn Beskrivning
0 stdin standardinmatning
ett stdout standardutgång
2 stderr Standardfelutgång

Till exempel: kommando1 2> fil1 kör kommando1 och skickar standardfel till fil1 .

I skal härledda från C Shell är syntaxen för att specificera strömmen att omdirigera till att lägga till ett & -tecken efter omdirigeringstecknet.

Ofta kombineras standardfelströmmen med standardutgångsströmmen så att fel och normal programutgång kan bearbetas tillsammans. Till exempel:

hitta / -namn .profil > results.txt 2>&1

kommer att försöka hitta alla filer som heter .profile . Om det körs utan omdirigeringar kommer detta kommando att skicka sökresultat till stdout och felmeddelanden (som otillräckliga behörigheter när man försöker söka i skyddade kataloger) till stderr . Som standard fylls dessa roller av konsolen. Om standardutdata dirigeras till results.txt kommer fel fortfarande att skickas till konsolen. För att få både fel och sökresultat skickade till results.txt kombinerades standardfel- och utdataströmmarna med 2>&1 .

Att skriva 2>&1 före > kommer inte att fungera, för när tolken läser 2>&1 vet den inte var standardutgången omdirigeras till, så fel- och utgångsströmmarna slås inte samman.

Om det kombinerade resultatet ska skickas till ingången till ett annat program, måste sekvensen 2>&1 föregå pipelinetecknet | . Till exempel:

hitta / -namn .profile 2>&1 | mindre .

En förenklad form av kommandot: kommando > fil 2>&1 ser ut så här: kommando &> fil eller kommando >& fil

Transportörkedja

Kommandon för omdirigering och pipelining kan kedjas samman för att producera mer komplexa kommandon, som:

ls | grep '.sh' | sortera > shlist

får en lista över innehållet i den aktuella katalogen, som filtreras för att bara lämna rader som innehåller '.sh' , sedan sorteras denna filtrerade lista lexikalt och det slutliga resultatet placeras i filen shlist . Dessa typer av konstruktioner finns ofta i skalskript.

Omdirigerar till flera utgångar

Standard tee- kommandot kan omdirigera utdata från ett kommando till flera ställen samtidigt. Exempel:

ls -lrt | tee-fil1

dirigerar standardutmatningen av kommandot ls -lrt (lista över filer) till både konsolen och fil1 .

Omdirigera med

I Bash- skalet kan du omdirigera till en fil som läggs till i slutet. I det här fallet kommer informationen som lagras i filen inte att raderas, utan all ny information kommer att läggas till i slutet av denna fil. Syntax: kommando1 >> fil1

Inbäddat dokument

Vissa skal, och till och med applikationsspråk på hög nivå ( PHP , Perl ), tillåter inline dokumentsyntax (se Heredoc-syntax ) för att styra indata från själva programfilen, till exempel till standardutdata:

katt<<'EOF' Godtycklig text placeras här, inklusive - inklusive specialtecken EOF

Eller till en fil som läggs till i slutet:

cat<<'EOF'>>fil Godtycklig text placeras här, inklusive - inklusive specialtecken EOF

Slutsignaturen för slutet av ett inbäddat dokument EOF (ett godtyckligt värde kan användas, men EOF används ofta  - enligt betydelsen) måste börja i början av raden.

Länkar