Si j'entre l' option bash -x , il affichera toute la ligne. Mais le script s'exécutera normalement.
Comment puis-je exécuter ligne par ligne? Ensuite, je peux voir si cela fait la bonne chose, ou j'abandonne et corrige le bogue. Le même effet est mis un read
dans chaque ligne.
Réponses:
Vous n'avez pas besoin de mettre une lecture dans everyline, ajoutez simplement un piège comme le suivant dans votre script bash, il a l'effet que vous voulez, par exemple.
Fonctionne, je viens de le tester avec bash v4.2.8 et v3.2.25.
VERSION AMÉLIORÉE
Si votre script lit le contenu de fichiers, la liste ci-dessus ne fonctionnera pas. Une solution de contournement pourrait ressembler à l'exemple suivant.
Pour arrêter le script, vous devrez le tuer d'un autre shell dans ce cas.
ALTERNATIVE1
Si vous souhaitez simplement attendre quelques secondes avant de passer à la commande suivante de votre script, l'exemple suivant pourrait fonctionner pour vous.
J'ajoute set + x et set -x dans la commande trap pour rendre la sortie plus lisible.
la source
trap 'read -u1' debug
pour remplacer le problème de redirection de lecture de fichier.Peut-être que le débogueur BASH est fait pour vous.
la source
apt-get install bashdb
. Ensuite, il vous suffit d'exécuterbashdb your_command.sh
, de taperstep
, puis d'appuyer sur le retour chariot après cela.brew install bashdb
Si votre script bash est vraiment un ensemble de commandes uniques que vous souhaitez exécuter une par une, vous pouvez faire quelque chose comme ceci, qui exécute chaque commande une par une lorsque vous incrémentez une variable
LN
, correspondant au numéro de ligne que vous souhaitez exécuter . Cela vous permet d'exécuter à nouveau la dernière commande très facilement, puis d'incrémenter simplement la variable pour passer à la commande suivante.En supposant que vos commandes se trouvent dans un fichier "it.sh", exécutez ce qui suit, une par une.
la source
Jetez un œil à bash-stepping-xtrace .
Il permet de parcourir xtrace.
la source
xargs: peut filtrer les lignes
la source