Par exemple, j'ai un fichier bash simple
#!/bin/bash
cd ~/hello
ls
Comment puis-je lui faire afficher chaque commande avant de l'exécuter? Tout l'effet opposé de "@echo off" dans les scripts batch de Windows.
#!/bin/bash -x
Par exemple, j'ai un fichier bash simple
#!/bin/bash
cd ~/hello
ls
Comment puis-je lui faire afficher chaque commande avant de l'exécuter? Tout l'effet opposé de "@echo off" dans les scripts batch de Windows.
#!/bin/bash -x
Réponses:
bash -x script
ou
set -x
dans le script.
Vous pouvez redéfinir l'option avec set +x
. Si vous voulez juste le faire pour quelques commandes, vous pouvez utiliser un sous-shell: `(set -x; command1; command; ...;)
PS4
vous pouvez modifier l'invite de -x
. Exemple: PS4='Line $LINENO @ $(date +%s.%N): ' bash -x script
( date
cela ralentira cependant)
Ceux-ci fonctionnent également:
set -v
ou
#!/bin/bash -v
Mais -v n'imprime pas la chaîne PS4 avant chaque ligne de script et ne trace pas les étapes d'une instruction "pour" (par exemple) individuellement. Il fait écho aux commentaires alors que -x ne le fait pas.
Voici un exemple de sortie utilisant -v:
#!/bin/bash -v
# this is a comment
for i in {1..4}
do
echo -n $i
done
1234echo
echo hello
hello
Voici le résultat du même script avec -x:
+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo
+ echo hello
hello
Notez que j'ai inclus "echo -n" pour mettre en évidence les différences entre -v et -x. En outre, -v est identique à "-o verbose", mais ce dernier ne semble pas fonctionner dans le cadre d'un shebang.
Cela devrait fonctionner:
set -o verbose #echo on
...
set +o verbose #echo off
Il y a plusieurs façons.
#!/usr/bin/env bash -x
comme la ligne shebang.
L'inclusion set -x
dans le script lui-même activera la fonctionnalité tout set +x
en la désactivant. Ces deux méthodes fonctionneront également avec le shell sh plus portable.
Si je me souviens bien, Perl a aussi l'option -x.
va comme
language -x script
language = python, perl, bash -x = script d'opérateur = nom de fichier
J'espère que ça aide.
-x
n’a rien à faire avec un écho en Python
set
options, vous pouvez les trouver sur cette page de manuel .