sh(1)

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

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 -i anges, 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 -s angetts, eller -c saknas 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.).
MAIL 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/infog c 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/sh eller /usr/bin/sh. Kontrollera med command -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

  1. Kör ett kommando från sträng:

sh -c "cat myfile"

  1. 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.