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 help
dice 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 help
imposta i parametri posizionali sulla parolahelp
e ' t restituisce qualcosa.help set
fornisce una riga o giù di lì per ciascuna opzione, inclusa quella mostrata per-x
nella mia versione (precedente) e in t La fine di tale elenco diceUsing + rather than - causes these flags to be turned off.