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 helpprá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 helpnastaví poziční parametry na slovohelpa ' nevytvoří nic.help setdává pro každou možnost, včetně toho, který zobrazíte pro-xv mé (starší) verzi a v t na konci tohoto seznamu je uvedenoUsing + rather than - causes these flags to be turned off.