Skalet sh
Översikt 6: Koppla ihop flera kommandon
I skalet sh finns det huvudsakligen fem sätt att
koppla ihop kommandon med varandra:
- Semikolon eller ny rad
- "vänta på att föregående
kommando ska avslutas".
- Och-tecken ("&")
- "fortsätt omedelbart,
utan att vänta på att föregående kommando ska bli klart".
Kommandona kommer att utföras parallellt.
- Tvärstreck ("|")
- "koppla föregående kommandos
utmatning till följande kommandos inmatning". Detta
sätt att koppla kommandon kallas för ett rör (eng. "pipe"),
och tvärstreckstecknet brukar i det här sammanhanget
kallas för "pipe bar" på engelska. "Rör", "rörledning" och
"pipa" är vanliga svenska termer.
- Om-falskt-så ("||")
- "utför följande
kommando om föregående kommando misslyckas".
Kallas "or" på engelska, och fungerar ungefär som
||-operatorn i programspråket C.
- Om-sant-så ("&&")
- "utför följande
kommando om föregående kommando lyckas". Kallas
"and" på engelska, och är precis som || lånad
från programspråket C.
Den inbördes prioriteten mellan kommandona är att semikolon,
&-tecken och ny rad tillsammans har lägst prioritet,
därefter ||, sedan &&,
och högst prioritet har "pipe bar" ("|").
Man kan använda vanliga parenteser för att få annan prioritet,
men parenteserna har samtidigt en annan funktion, nämligen att
starta ett nytt skal som kommandona inom parentes utförs i.
Detta innebär att vissa inbyggda kommandon inte alltid
gör det man vill; till exempel görs alla förändringar
av variabelvärden bara i det nya skalet, och när man kommer
till slutparentesen försvinner det skalet igen, och inga
variabler har ändrats i ursprungsskalet.
Hur det fungerar
&-tecknets enda funktion är att tala om för skalet att
det inte ska vänta på att föregående kommando ska avslutas, utan
direkt ta hand om nästa kommando.
Ett |-tecken talar om för skalet att stänga föregående
kommandos standard output och efterföljande kommandos standard
input, och ersätta dem med en "pipe" som kopplar ihop kommandona.