set -x
Stampa una traccia di comandi semplici, per comandi, comandi case, comandi select e aritmetica per comandi e relativi argomenti o elenchi di parole associate dopo che sono stati espansi e prima che vengano eseguiti. Il valore della variabile PS4 viene espanso e il valore risultante viene stampato prima del comando e dei suoi argomenti espansi.
[fonte]
Esempio
set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30
set +x
echo `expr 10 + 20 `
30
L'esempio sopra illustra l'uso di set -x
. Quando viene utilizzato, l'espressione aritmetica sopra è stata espansa. Abbiamo potuto vedere come una singola riga è stata valutata passo dopo passo.
- Primo passaggio
expr
è stato valutato. - Secondo passaggio
echo
è stato valutato.
Per saperne di più su set → visita questo link
quando si tratta del tuo script di shell,
[ "$DEBUG" == 'true' ] && set -x
Il tuo script potrebbe aver stampato alcune righe aggiuntive di informazioni quando la modalità di esecuzione è stata selezionata come DEBUG
. Tradizionalmente le persone erano solite abilitare la modalità di debug quando uno script veniva chiamato con argomenti facoltativi come -d
-u:disabilitato per impostazione predefinita. Quando attivato, viene visualizzato un messaggio di errore quando si utilizza una variabile non configurata.
-v:inattivo per impostazione predefinita. Dopo l'attivazione, il contenuto originale delle informazioni verrà visualizzato (senza risoluzione variabile) prima che le informazioni vengano emesse.
-x:inattivo per impostazione predefinita. Se attivato, il contenuto del comando verrà visualizzato prima che il comando venga eseguito (dopo la risoluzione variabile, c'è un simbolo ++).
Confronta le seguenti differenze:
/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root
/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root
/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET
set -x
abilita una modalità della shell in cui tutti i comandi eseguiti vengono stampati sul terminale. Nel tuo caso è chiaramente usato per il debug, che è un tipico caso d'uso per set -x
:la stampa di ogni comando mentre viene eseguito può aiutarti a visualizzare il flusso di controllo dello script se non funziona come previsto.
set +x
lo disabilita.