102 votes

Comment faire en sorte que bash scripts imprime chaque commande avant son exécution ?

Par exemple, j'ai un simple fichier bash

#!/bin/bash
cd ~/hello
ls

Comment puis-je faire en sorte qu'il affiche chaque commande avant de l'exécuter ? C'est l'effet inverse de "@echo off" dans les scripts batch de Windows.

131voto

Steven Parkes Points 1355
bash -x script

o

set -x

dans le script.

Vous pouvez à nouveau désactiver l'option avec set +x . Si vous ne voulez le faire que pour quelques commandes, vous pouvez utiliser un sous-shell : `(set -x ; command1 ; command ; ... ;)

26voto

jason saldo Points 5036

Ceux-ci fonctionnent également :

set -v

o

#!/bin/bash -v

Mais -v n'imprime pas la chaîne PS4 avant chaque ligne de script et il ne trace pas les étapes d'une instruction "for" (par exemple) individuellement. Il fait l'écho des commentaires alors que -x ne le fait pas.

Voici un exemple de la sortie en 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 l'accent sur les différences entre -v et -x. De même, -v est identique à "-o verbose", mais ce dernier semble ne pas fonctionner en tant que partie d'un shebang.

10voto

templeorder Points 403

Cela devrait également fonctionner :

#!/bin/bash -x
cd ~/hello
ls

7voto

Bob Points 34449

Cela devrait fonctionner :

set -o verbose #echo on
...
set +o verbose #echo off

5voto

pihentagy Points 263

set -o xtrace y set +o xtrace sont vos amis (ils sont plus verbeux que les -o verbose et la sortie va dans STDERR, par opposition à verbose, qui semble se connecter à STDOUT).

Voir plus de conseils aquí

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X