Ad esempio, ho un semplice file bash
#!/bin/bash
cd ~/hello
ls
Come posso fare in modo che visualizzi tutti i comandi prima di eseguirlo? Proprio l'effetto opposto di "@echo off" negli script batch di Windows.
#!/bin/bash -x
Ad esempio, ho un semplice file bash
#!/bin/bash
cd ~/hello
ls
Come posso fare in modo che visualizzi tutti i comandi prima di eseguirlo? Proprio l'effetto opposto di "@echo off" negli script batch di Windows.
#!/bin/bash -x
Risposte:
bash -x script
o
set -x
nella sceneggiatura.
È possibile deselezionare nuovamente l'opzione con set +x
. Se vuoi solo farlo per alcuni comandi puoi usare una subshell: `(set -x; command1; command; ...;)
PS4
è possibile modificare il prompt di -x
. Ad esempio: PS4='Line $LINENO @ $(date +%s.%N): ' bash -x script
( date
rallenterà, però)
Questi funzionano anche:
set -v
o
#!/bin/bash -v
Ma -v non stampa la stringa PS4 prima di ogni riga di script e non traccia i passaggi di un'istruzione "for" (ad esempio) individualmente. Fa eco ai commenti mentre -x no.
Ecco un esempio dell'output usando -v:
#!/bin/bash -v
# this is a comment
for i in {1..4}
do
echo -n $i
done
1234echo
echo hello
hello
Ecco il risultato dello stesso script con -x:
+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo
+ echo hello
hello
Nota che ho incluso "echo -n" per aggiungere enfasi alle differenze tra -v e -x. Inoltre, -v è lo stesso di "-o verbose", ma quest'ultimo sembra non funzionare come parte di uno shebang.
va come
language -x script
lingua = python, perl, bash -x = operatore script = nome file
spero che sia d'aiuto.
-x
non ha nulla a che fare con l'eco in Python
set
opzioni, le puoi trovare in questa pagina di manuale .