Kolega mi nedávno představil bash -x
pro ladění mých bash skriptů bez převzetí echo $foo
trasy.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Interně – jak toho dosahuje bash? Zkontroloval jsem man bash
a při vyvolání tlumočníka (nezdálo se mi to) zmínil příznak -x
. Hledám hlavně přehled toho, co bude a nebude laděno v -x
prostředí nebo v jakémkoli jiném systému.
Odpovědět
-x
je stejné jako nastavení xtrace
pomocí -o
možnost bash. Z mé kopie stránky bash:
Po rozšíření každého jednoduchého příkazu , pro příkaz , případ , vyberte příkaz nebo aritmetický pro příkaz, zobrazí rozšířenou hodnotu PS4 , následovanou příkazem a jeho rozšířeným argumenem ts nebo seznam přidružených slov.
Nemyslím si, že s tím existuje mnoho „gotchas“: vytiskne každý spuštěný příkaz. Předpokládám, že pokud analyzujete výstup stderr
ze skriptu prostředí, může to pokazit, protože příkazy jsou vytištěny na stderr
(aka deskriptor souboru 2), ale zdá se to jako extrémní případ.
(Můžete to také podmíněně povolit uvnitř skriptů nebo v interaktivních relacích prostředí s set -x
to zapněte jej a set +x
znovu vypněte.)
set help
právě říká-x Print commands and their arguments as they are executed.
. Nelze najít ' nic o tom, jak zrušit to v aktuálním prostředí.set help
nastaví poziční parametry na slovohelp
a ' nevytvoří nic.help set
dává pro každou možnost, včetně toho, který zobrazíte pro-x
v mé (starší) verzi a v t na konci tohoto seznamu je uvedenoUsing + rather than - causes these flags to be turned off.