równoważne „echo włączone” dla systemu Linux?

27

Jak mogę ustawić standardowe polecenia dla wszystkich poleceń uruchamianych w skrypcie bash?

Oznacza to, że dane wyjściowe muszą zawierać same polecenia wyjściowe ORAZ.

znalazłem

#!/bin/bash -x

ale to nie jest dokładnie to samo, ponieważ zamiast

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

to pokazuje

+ mysql -v dbname
+ grep 'CREATE TABLE'
Putnik
źródło

Odpowiedzi:

29

Zastosowanie bash -v.

To jest skrypt:

#!/bin/bash -v

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

echo "Done."

To jest wynik:

#!/bin/bash -v

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

echo "Done."
Done.

Niestety nie ma specjalnego znacznika, takiego jak PS4do drukowania rozszerzonych poleceń. Możesz połączyć oba, aby szybko zidentyfikować polecenia:

#!/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
źródło
12

set -x to inny sposób na zrobienie tego.

$ cat a.sh
#!/bin/bash

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

Dane wyjściowe będą:

sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.
Ashok Vairavan
źródło
1
To jest coś, co OP uznał za bezużyteczne w swoim pytaniu ...
Daniel Beck
@Ashok Czy mógłbyś wyjaśnić? Nie widzę różnicy: tutaj ps: GNU bash, wersja 4.1.5 (1) -release (i486-pc-linux-gnu) Ubuntu 10.04.3
Putnik
1
@Putnik To ta sama podstawowa rzecz, ale możesz set -xw dowolnym miejscu skryptu, a nawet dezaktywować go ponownie. Więc jeśli chcesz tylko na echo "Done"linii, umieść set -xtuż przed tym.
Daniel Beck