"echo on" équivalent pour linux?

27

Comment puis-je accéder à stdout toutes les commandes qui s'exécutent dans le script bash?

C'est-à-dire que la sortie doit contenir les commandes de sortie ET les commandes elles-mêmes.

j'ai trouvé

#!/bin/bash -x

mais ce n'est pas exactement la même chose car au lieu de

 mysql -v dbname < dump.sql | grep "CREATE TABLE"

ça montre

+ mysql -v dbname
+ grep 'CREATE TABLE'
Putnik
la source

Réponses:

29

Utilisez bash -v.

Voici le script:

#!/bin/bash -v

echo "Hello, World" | sed 's|Hello|Goodbye|'

echo "Done."

Voici la sortie:

#!/bin/bash -v

echo "Hello, World" | sed 's|Hello|Goodbye|'
Goodbye, World

echo "Done."
Done.

Malheureusement, il n'y a pas de marqueur spécial comme PS4pour l'impression de commandes étendues. Vous pouvez cependant combiner les deux pour identifier rapidement les commandes:

#!/bin/bash -vx

echo "Hello, World" | sed 's|Hello|Goodbye|'
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World

echo "Done."
+ echo Done.
Done.
Daniel Beck
la source
12

set -x est une autre façon de le faire.

$ cat a.sh
#!/bin/bash

set -x
echo "Hello, World" | sed 's|Hello|Goodbye|'
echo "Done."

La sortie sera:

sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.
Ashok Vairavan
la source
1
Ce qui est un peu ce que le PO a rejeté comme un droit inutile dans sa question ...
Daniel Beck
@Ashok Pourriez-vous s'il vous plaît expliquer? Je ne vois pas la différence: ici ps: GNU bash, version 4.1.5 (1) -release (i486-pc-linux-gnu) Ubuntu 10.04.3
Putnik
1
@Putnik C'est la même chose de base, mais vous pouvez set -xn'importe où dans le script, et même le désactiver à nouveau. Donc, si vous ne le souhaitez que sur la echo "Done"ligne, mettez-le set -xjuste avant celui-ci.
Daniel Beck