Imprimer chaque commande avant d'exécuter? [dupliquer]

Cette question a déjà une réponse ici:

Quelle est la meilleure façon de configurer un script bash qui imprime chaque commande avant de l'exécuter?

Ce serait génial pour le débogage.

J'ai déjà essayé ceci:

CMD="./my-command --params >stdout.txt 2>stderr.txt"
echo $CMD
`$CMD`

Ce qu'il est censé faire est de imprimer ce premier:

./my-command --params >stdout.txt 2>stderr.txt

Puis exécutez ./my-command --params, avec la sortie redirigée vers les fichiers spécifiés.

163
demandé sur codeforester 2011-04-22 02:27:23

4 réponses

set -o xtrace

Ou

bash -x myscript.sh

cela fonctionne aussi avec standard / bin / sh IIRC (ce pourrait être une chose POSIX alors)

Et rappelez-vous, il est bashdb (bash Shell Debugger, release 4.0-0.4)


Pour revenir à la normale, quittez le sous-Shell ou

set +o xtrace
218
répondu sehe 2011-04-21 22:28:59

La façon La plus simple de le faire est de laisser bash faire:

set -x

Ou exécutez-le explicitement comme bash -x myscript.

59
répondu geekosaur 2011-04-21 22:29:50

Set-x est bien, mais si vous faites quelque chose comme :

set -x;
command;
set +x;

, Il en résulterait l'impression

+ command
+ set +x;

Vous pouvez utiliser un sous-shell pour empêcher cela tel que:

(set -x; command)

Qui imprimerait simplement la commande.

42
répondu VDarricau 2015-07-13 19:41:54

set -x ça va.

Une Autre façon d'imprimer chaque commande exécutée est l'utilisation de trap avec DEBUG. Mettre cette ligne au début de votre script :

trap 'echo "# $BASH_COMMAND"' DEBUG

, Vous pouvez trouver beaucoup d'autres trap usages ici.

23
répondu Edouard Thiel 2017-05-23 12:10:34