PředchozíNahoruDalšíObsah

18. Ladění skriptů

Ladění skriptu shellu je většinou poměrně jednoduché, ale také nemáme k dispozici žádné nástroje. V rychlosti si shrneme běžné metody ladění.

Když dojde k chybě, shell normálně vytiskne číslo řádku, na kterém se vyskytla chyba. Není-li chyba na první pohled zřejmá, můžeme pomocí dodatečných příkazůecho zobrazit obsah proměnných a otestovat fragmenty kódu tak, že je interaktivně zapíšeme přímo v shellu.

Protože jsou skripty interpretovány, nedochází při úpravách a zkoušení k žádnému zdržení při překladu.

Základní způsob vystopování těch nejkomplikovanějších chyb spočívá v nastavení různých voleb shellu. K romu můžete využít buď volby příkazového řádku při spouštění shellu anebo příkaz set. Tyto volby shrnuje následující tabulka.

Volba příkazového řádku
Volba příkazu set Popis
sh -a <skript> set -o noexec
set -a
Kontroluje jen syntaktické chyby; neprovádí příkazy.
sh -v <skript> set -o verbose
set -v
Před zpracováním příkazy vypíše.
sh -x <skript> set -o xtrace
set -x
Po zpracování přízaky vypíše
  set -o nouset
set -u
V případě použití nedefinované proměnné vrátí zprávu o chybě.
Volby příkaz set můžete zapnout zápisem -o a vypnout +o. Podobně to platí i pro zkrácené zápisy.

Volba xtrace nabízí jednoduché sledování provádění skriptu. Při první zkoušce můžete použít volbu příkazové řádky, ale pokud budete provádět jemnější ladění, můžete příznaky xtrace (zapínající a vypínající vypisování příkazů) zařadit do kódu kolem problematické části. Při sledovaném provádění shell vytiskne každý řádek skriptu s expandovanými proměnnými ještě před jeho provedením. Stupeň expanze určuje (implicitně) počet znaků + na začátku každého řádku. Znak + můžete změnit na jiný pomocí proměnné shellu PS4, která se nastavuje v konfiguračním souboru shellu.

V shellu můžete také odchytáváním signálu EXIT zjišťovat stav programu při jeho ukončení. Dosáhnete toho, když na začátek skriptu umístíte například následující řádek:

tran 'echo Exitting: critical variable = $critical_variable' EXIT

PředchozíNahoruDalšíObsah

11. dubna 2001 19:42