equivalente "echo on" per linux?


27

Come posso ottenere lo stdout di tutti i comandi eseguiti nello script bash?

Questo è l'output deve contenere i comandi output AND i comandi stessi.

ho trovato

#!/bin/bash -x

ma questo non è esattamente lo stesso perché invece di

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

mostra

+ mysql -v dbname
+ grep 'CREATE TABLE'

Risposte:


29

Usa bash -v.

Questo è lo script:

#!/bin/bash -v

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

echo "Done."

Questo è l'output:

#!/bin/bash -v

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

echo "Done."
Done.

Sfortunatamente, non esiste un marcatore speciale come PS4per la stampa di comandi espansi. Puoi combinarli entrambi per identificare rapidamente i comandi:

#!/bin/bash -vx

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

echo "Done."
+ echo Done.
Done.

12

set -x è un altro modo di farlo.

$ cat a.sh
#!/bin/bash

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

L'output sarà:

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

1
Il che è una specie di ciò che l'OP ha ritenuto inutile proprio nella sua domanda ...
Daniel Beck

@Ashok Potresti spiegare per favore? Non riesco a vedere la differenza: qui ps: GNU bash, versione 4.1.5 (1) -release (i486-pc-linux-gnu) Ubuntu 10.04.3
Putnik

1
@Putnik E 'la stessa cosa di base, ma è possibile set -xin qualsiasi punto dello script, e anche disattivarlo di nuovo. Quindi, se lo vuoi solo sulla echo "Done"linea, metti set -xappena prima di quello.
Daniel Beck
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.