äquivalentes "echo on" für linux?

27

Wie kann ich alle Befehle ausgeben, die im Bash-Skript ausgeführt werden?

Das heißt, die Ausgabe muss Befehle enthalten, die AND-Befehle selbst ausgeben.

ich fand

#!/bin/bash -x

das ist aber nicht genau das selbe denn statt

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

es zeigt

+ mysql -v dbname
+ grep 'CREATE TABLE'
Putnik
quelle

Antworten:

29

Verwenden Sie bash -v.

Dies ist das Skript:

#!/bin/bash -v

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

echo "Done."

Dies ist die Ausgabe:

#!/bin/bash -v

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

echo "Done."
Done.

Leider gibt es keine speziellen Markierungen PS4zum Drucken erweiterter Befehle. Sie können jedoch beide kombinieren, um Befehle schnell zu identifizieren:

#!/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
quelle
12

set -x ist eine andere Methode.

$ cat a.sh
#!/bin/bash

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

Die Ausgabe wird sein:

sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.
Ashok Vairavan
quelle
1
Welches ist eine Art, was das OP in seiner Frage als nutzlos abgetan hat ...
Daniel Beck
@Ashok Könnten Sie bitte erklären? Ich kann den Unterschied nicht erkennen: hier ps: GNU bash, Version 4.1.5 (1) -release (i486-pc-linux-gnu) Ubuntu 10.04.3
Putnik
1
@Putnik Es ist das gleiche Grundlegende, aber Sie können set -xdas Skript an einer beliebigen Stelle aktivieren und sogar wieder deaktivieren. Wenn Sie es also nur in der echo "Done"Leitung haben möchten , stellen Sie es set -xeinfach davor.
Daniel Beck