I/O-omdirigering

I/O-omdirigering  er muligheden for kommandoskallen i nogle operativsystemer til at omdirigere standardstrømme til en brugerdefineret placering, såsom en fil. Karakteristisk for Unix-lignende operativsystemer , men implementeret i varierende grad i operativsystemer i andre familier.

Omdirigering af standard input-outputstrømme

Omdirigering udføres normalt ved at indsætte specialtegnet > mellem kommandoer.
Normalt ser syntaksen sådan ud: kommando1 > fil1 - udfører kommando1 , og sætter standardoutputtet i fil1 ; kommando1 < fil1 udfører kommando1 ved at bruge fil1 som input (i stedet for tastaturet ).
For hver inputanmodning læser programmet en linje tekst fra filen. Konstruktionskommando1 < fil1 > fil2 kombinerer de to foregående muligheder: udfører kommando1 input fra fil1 og output til fil2 .

Transportører

Pipelines  er muligheden for flere programmer til at arbejde sammen, når outputtet af et program direkte går til input fra et andet uden brug af midlertidige mellemfiler . Syntaks: kommando1 | kommando2 udfører kommando1 ved at bruge dets output som input, når kommando2 udføres , hvilket er det samme som at bruge to omdirigeringer og en midlertidig fil:

kommando1 > midlertidig fil kommando2 < TempFil rm TempFile

Et godt eksempel på kommandopipelines er at kombinere ekko med en anden kommando for at få interaktivitet i ikke-interaktive miljøer, for eksempel:

echo -e "Brugernavn\nAdgangskode" | ftp localhost

Dette starter en ftp- klient, der opretter forbindelse til den lokale vært ( localhost ). På anmodning af programmet indtaster det den første linje Brugernavn , derefter ved næste input-anmodning læser det linjen Password . Linjerne i ekkokommandoen er adskilt af \n .

Omdirigering fra standard filbeskrivelser

I den Bourne shell -afledte Unix shell kan de foregående to trin forbedres ved at tilføje et tal ( filbeskrivelse ) umiddelbart før omdirigeringstegnet. Dette nummer angiver, hvilken stream der bruges til omdirigeringen. Unix har følgende standard input/output streams:

Deskriptor Navn Beskrivelse
0 stdin standard input
en stdout standard output
2 stderr Standard fejloutput

For eksempel: kommando1 2> fil1 udfører kommando1 og sender standardfejl til fil1 .

I skaller afledt af C Shell er syntaksen for at angive strømmen, der skal omdirigeres til, at tilføje et & -tegn efter omdirigeringstegnet.

Ofte kombineres standardfejlstrømmen med standardoutputstrømmen, så fejl og normal programoutput kan behandles sammen. For eksempel:

find / -navn .profil > resultater.txt 2>&1

vil forsøge at finde alle filer med navnet .profile . Hvis den køres uden omdirigeringer, sender denne kommando søgeresultater til stdout og fejlmeddelelser (såsom utilstrækkelige tilladelser ved forsøg på at søge i beskyttede mapper) til stderr . Som standard udfyldes disse roller af konsollen. Hvis standardoutputtet er dirigeret til results.txt , vil fejl stadig blive sendt til konsollen. For at få både fejl og søgeresultater sendt til results.txt , blev standardfejl- og outputstrømmene kombineret med 2>&1 .

At skrive 2>&1 før > virker ikke, for når tolken læser 2>&1 , ved den ikke, hvor standardoutputtet omdirigeres til, så fejl- og outputstrømmene bliver ikke flettet sammen.

Hvis det kombinerede resultat skal overføres til input fra et andet program, skal sekvensen 2>&1 gå foran pipeline-tegnet | . For eksempel:

find / -navn .profile 2>&1 | mindre .

En forenklet form af kommandoen: kommando > fil 2>&1 ser sådan ud: kommando &> fil eller kommando >& fil

Transportbånd

Omdirigerings- og pipelining-kommandoer kan kædes sammen for at producere mere komplekse kommandoer, såsom:

ls | grep '.sh' | sorter > shlist

får en liste over indholdet af den aktuelle mappe, som er filtreret til kun at efterlade linjer indeholdende '.sh' , så sorteres denne filtrerede liste leksikalsk og det endelige resultat placeres i filen shlist . Disse typer konstruktioner findes ofte i shell-scripts.

Omdirigerer til flere udgange

Standard tee -kommandoen kan omdirigere output fra en kommando til flere steder på samme tid. Eksempel:

ls -lrt | tee-fil 1

dirigerer standardoutputtet af ls -lrt-kommandoen (liste over filer) til både konsollen og fil1 .

Omdiriger med

I Bash - skallen kan du omdirigere til en fil, der er tilføjet til slutningen. I dette tilfælde slettes oplysningerne i filen ikke, men alle nye oplysninger vil blive tilføjet til slutningen af ​​denne fil. Syntaks: kommando1 >> fil1

Indlejret dokument

Nogle skaller, og endda applikationssprog på højt niveau ( PHP , Perl ), tillader inline dokumentsyntaks (se Heredoc-syntaks ) at dirigere input fra selve programfilen, for eksempel til standardoutput:

kat<<'EOF' Vilkårlig tekst er placeret her, herunder - inklusive specialtegn EOF

Eller til en fil tilføjet til slutningen:

cat<<'EOF'>>fil Vilkårlig tekst er placeret her, herunder - inklusive specialtegn EOF

Slutsignaturen på slutningen af ​​et indlejret dokument EOF (en vilkårlig værdi kan bruges, men EOF bruges ofte  - alt efter betydningen) skal begynde i begyndelsen af ​​linjen.

Links