Un collègue ma récemment présenté bash -x
pour déboguer mes scripts bash sans prendre litinéraire echo $foo
.
$ bash -x hello-world.sh + echo "Hello World" Hello World
En interne – comment bash y parvient-il? Jai vérifié man bash
et il (ne semble pas avoir?) Mentionné le drapeau -x
lors de lappel de linterpréteur. Je recherche principalement un aperçu de ce qui sera et ne sera pas débogué dans lenvironnement -x
, ou dans tout autre piège.
Réponse
-x
équivaut à définir xtrace
avec -o
à bash. À partir de ma copie de la page de manuel bash:
Après avoir développé chaque commande simple , pour la commande , case , sélectionnez la commande ou arithmétique pour commande, affiche la valeur développée de PS4 , suivie de la commande et de son argument développé ts ou liste de mots associés.
Je ne pense pas quil y ait beaucoup de « pièges » avec ceci: il affiche chaque commande quil exécute. Je suppose que si vous « analysez la sortie stderr
du script shell, cela peut gâcher cela, car les commandes sont imprimées sur stderr
(aka descripteur de fichier 2), mais cela semble être un cas extrême.
(Vous pouvez également lactiver conditionnellement à lintérieur de scripts ou dans des sessions shell interactives avec set -x
pour activez-le et set +x
pour le désactiver à nouveau.)
set help
dit simplement-x Print commands and their arguments as they are executed.
. Je nai pas pu ' trouver quoi que ce soit sur la façon de non défini que dans le shell actuel.set help
définit les paramètres de position sur le mothelp
et doesn ' t afficher quoi que ce soit.help set
donne environ une ligne pour chaque option, y compris celle que vous affichez pour-x
dans ma (ancienne) version, et en t la fin de cette liste ditUsing + rather than - causes these flags to be turned off.