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.
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
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
.
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.
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.