sh(1)
sh (1p) — POSIX-skalet
sh — standardkommandotolken enligt POSIX. Den exekverar kommandon från en sträng, standardinmatning eller en angiven fil.
SYNOPSYS
sh [ -abCefhimnuvx ] [ -o option ]... [ +abCefhimnuvx ] [ +o option ]... [ command_file [ argument ... ]]
sh -c [ -abCefhimnuvx ] [ -o option ]... [ +abCefhimnuvx ] [ +o option ]... command_string [ command_name [ argument ... ]]
sh -s [ -abCefhimnuvx ] [ -o option ]... [ +abCefhimnuvx ] [ +o option ]... [ argument ... ]
BESKRIVNING
- sh tolkar och kör kommandon enligt *Skalspråket* (POSIX kapitel 2).
- Filnamnsgenerering (pathname expansion) får inte fallera på grund av filstorlekar.
- IO-omdirigeringar är implementeringsdefinierade vad gäller offsetgränser.
INTERAKTIVT LÄGE
- Skalet betraktas som interaktivt om
-ianges, eller om inga operander ges och både stdin och stderr är terminaler. - I interaktivt läge hanteras signaler särskilt (se nedan).
FLAGGOR/ALTERNATIV
De flesta flaggor motsvarar set-interna alternativ. Ett + framför bokstaven ger motsatt effekt.
| Flagga | Effekt (kort) | Detaljer |
|---|---|---|
-a / +a |
exportera alla tilldelade variabler | Mappas till set -a/+a |
-b / +b |
asynkron jobbnofifiering | set -b |
-C / +C |
noclobber (förhindra > att skriva över) | set -C |
-e / +e |
avsluta vid fel i icke-interaktivt läge | set -e |
-f / +f |
stäng av filnamnsglobbing | set -f |
-m / +m |
jobbstyrning | set -m |
-n / +n |
läs men exekvera inte (syntaxkontroll) | set -n |
-o name / +o name |
slå på/av namngivet skalalternativ | t.ex. set -o vi |
-u / +u |
fel på odefinierade variabler | set -u |
-v / +v |
skriv inläst input till stderr | set -v |
-x / +x |
spåra (visa) kommandon före körning | set -x |
-c |
kör kommandon från sträng | Sätter $0 till command_name och positionella param. från resterande |
-i |
interaktivt skal | Kan nekas om euid!=ruid eller egid!=rgid |
-s |
läs kommandon från stdin | Antas om inget annat angivits |
OPERANDER
| Operand | Betydelse |
|---|---|
- |
Ensam - ignoreras om första operand.
|
argument |
Sätter positionella parametrar ($1, $2, …). |
command_file |
Fil med kommandon. Om inga snedstreck: läs från cwd, ev. sök via $PATH. Sätter $0. |
command_name |
Värde för $0 när -c används. |
command_string |
En sträng som tolkas som kommando(n). Tom sträng ger exit 0. |
STDIN/INPUT-FILER
- Stdin används om
-sangetts, eller-csaknas och inga operander ges, eller om ett kommando (t.ex. read) behöver input. - När skalet använder stdin och startar ett kommando som också läser stdin, ska filpekaren stå direkt efter det som skalet läst.
- Om stdin är FIFO/terminal och icke-blockerande ska sh slå på blockerande läsning.
- Skriptfilen är en textfil (rader kan vara godtyckligt långa). En fil med enbart tomrader/kommentarer ger exit 0.
MILJÖVARIABLER
| Variabel | Påverkan |
|---|---|
| ENV | För interaktivt skal: expanderas och körs i aktuell miljö (måste vara absolut sökväg för definierat beteende). Ignoreras vid setuid/setgid-skillnader. |
| FCEDIT | Standardeditor för fc -e. Tom/ej satt ⇒ ed.
|
| HISTFILE | Sökväg till historikfil (annars kan $HOME/.sh_history användas). Beteende vid samtidig åtkomst är ospecificerat.
|
| HISTSIZE | Max antal historikposter (≥128). Kan läsas vid init; ändringar senare kan vara utan effekt. |
| HOME | Hemkatalog; används vid ~-expansion. |
| LANG/LC_* | Lokalinställningar (klassificering, meddelanden, kollation m.m.). |
| Sökväg till brevlådefil; används för mailnotifiering om MAILPATH ej är satt. | |
| MAILCHECK | Sekunder mellan koll av mail (default 600). 0 ⇒ före varje primär prompt. |
| MAILPATH | Lista av sökvägar (kolonseparerad) med ev. ”%”-meddelanden för mailnotifiering. Går före MAIL. |
| NLSPATH | Lokaler för meddelandekataloger. |
| PATH | Sökväg för kommandon (påverkar kommandosökning). |
| PWD | Absolut sökväg till nuvarande katalog (tilldelning kan ignoreras). |
ASYNKRONA HÄNDELSER (SIGNALER)
- Interaktivt:
- SIGINT under radredigering: hanteras så att redigeringen avbryts och prompt återges.
- SIGINT annars: fångas men gör inget.
- SIGQUIT, SIGTERM ignoreras.
- Med
-m: SIGTTIN, SIGTTOU, SIGTSTP ignoreras. - Utan
-m: beteendet för TTY-signaler är ospecificerat (ignoreras/standard/fångas).
- trap kan åsidosätta standardbeteende.
UTDATA/DIAGNOSTIK
- STDOUT: inga särskilda krav (se enskilda verktyg).
- STDERR: används för diagnostik (om inte interaktivt läge/verktyg säger annat).
KOMMANDOHISTORIK & RADREDIGERING (vi-läge)
- set -o vi aktiverar vi-läget (set +o vi stänger av). Andra edit-lägen kan finnas implementation-specifikt.
- Historik lagras i HISTFILE (format/ospec.).
- Vi-läget har insättnings- och kommandoläge samt ett stort antal rörelse- och redigeringskommandon.
- (Detaljerad lista enligt POSIX: rörelser
h j k l w W b B e E ^ $ 0 | f/F/t/T ; ,, borttag/infogc d y p P x X r, historiksökning/ ? n N, m.m.)
AVSLUTNINGSKODER
| Kod | Betydelse |
|---|---|
| 0 | Skriptet bestod endast av tomrader/kommentarer ELLER -c "".
|
| 1–125 | Fel i icke-interaktivt skal (t.ex. syntax, redirection, variabeltilldelning), ej ”fil saknas”. |
| 126 | Angivet command_file kunde inte exekveras (ENOEXEC).
|
| 127 | Angivet command_file hittades inte av icke-interaktivt skal.
|
| annars | Exitstatus från sista körda (eller försökt körda) kommandot. |
FELKONSEKVENSER
- Se POSIX kap. 2.8.1 (skal-fel och dess effekt). Interaktivitet och redirect av stderr påverkar.
ANVÄNDNINGSTIPS
- Om första operand börjar med ”+”, skydda den med
--för att markera slut på flaggor. - Anta inte att skalet finns på
/bin/sheller/usr/bin/sh. Kontrollera medcommand -v sh. - För ”#!-skript”: bestäm rätt skalväg vid installation (t.ex. via
getconf PATH) och skriv in i skriptens första rad.
EXEMPEL
- Kör ett kommando från sträng:
sh -c "cat myfile"
- Kör skript i aktuell katalog:
sh my_shell_cmds
RATIONALE (sammandrag)
- sh och set delar flaggor; IFS fungerar som fältdelare.
- Interaktiva signalregler finns för att undvika att ”kill 0” dödar skalet och göra ”wait” avbrytbar.
- Kommandoradredigering standardiseras bara för vi-läget; andra lägen kan finnas.
- Sökväg till sh ska inte hårdkodas.
SE ÄVEN
- POSIX Kapitel 2 (Skalspråk): kommandosökning/-exekvering, expansioner, mönster, inbyggda kommandon (cd, echo, exit, fc, pwd, set, stty, test, trap, umask, vi).
- Systemanrop/gränssnitt: dup, exec, exit, fork, open, pipe, signal, system, ulimit, umask, wait.
NOTERING OM OMFATTNING
Denna wiki-fil sammanfattar hela manualens innehåll på svenska och behåller struktur, tabeller (flaggor, operander, miljövariabler, exitkoder) och huvudpunkter. För maximal noggrannhet, slå upp originaltexten när juridisk/standardspecifik precision krävs.