Äquivalent zu „Echo on“ für Linux?

Äquivalent zu „Echo on“ für Linux?

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

Das heißt, die Ausgabe muss Befehlsausgabe UND Befehle selbst enthalten.

ich fand

#!/bin/bash -x

aber das ist nicht genau dasselbe, denn statt

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

es zeigt

+ mysql -v dbname
+ grep 'CREATE TABLE'

Antwort1

Verwenden 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 keinen speziellen Marker wie PS4zum Drucken erweiterter Befehle. Man könnte aber beides 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.

Antwort2

set -x ist eine andere Möglichkeit, dies zu tun.

$ cat a.sh
#!/bin/bash

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

Die Ausgabe lautet:

sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.

Antwort3

set -xist gleichbedeutend mit "Echo an"

set +xist gleichbedeutend mit "Echo aus"

verwandte Informationen