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 helpdit 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 helpdéfinit les paramètres de position sur le mothelpet doesn ' t afficher quoi que ce soit.help setdonne environ une ligne pour chaque option, y compris celle que vous affichez pour-xdans ma (ancienne) version, et en t la fin de cette liste ditUsing + rather than - causes these flags to be turned off.