Un collega mi ha recentemente presentato a bash -x per eseguire il debug dei miei script bash senza prendere il percorso echo $foo.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Internamente: come fa bash a farlo? Ho controllato man bash e (non sembrava?) Menzionava il flag -x quando ho richiamato linterprete. Sto cercando principalmente una panoramica di ciò che verrà e cosa non verrà sottoposto a debug nellambiente -x o in qualsiasi altro trucco.
Risposta
-x equivale a impostare xtrace con -o per bash. Dalla mia copia della manpage di bash:
Dopo aver espanso ogni comando semplice , per il comando , case , seleziona comando o aritmetica per , visualizza il valore espanso di PS4 , seguito dal comando e dal suo argomento espanso ts o elenco di parole associate.
Non credo che ci siano molti “trucchi” con questo: stampa ogni comando che esegue. Suppongo che se “stai analizzando loutput stderr dallo script della shell, questo può rovinare tutto, perché i comandi vengono stampati su stderr (noto anche come descrittore di file 2), ma sembra un caso estremo.
(Puoi anche abilitarlo in modo condizionale allinterno di script o in sessioni di shell interattive con set -x per accenderlo e set +x per spegnerlo di nuovo.)
set helpdice solo-x Print commands and their arguments as they are executed.. Non sono riuscito ' a trovare qualcosa su come deseleziona quello nella shell corrente.set helpimposta i parametri posizionali sulla parolahelpe ' t restituisce qualcosa.help setfornisce una riga o giù di lì per ciascuna opzione, inclusa quella mostrata per-xnella mia versione (precedente) e in t La fine di tale elenco diceUsing + rather than - causes these flags to be turned off.