equivalente “echo on” para linux?

20

Como posso obter stdout todos os comandos que são executados no script bash?

Essa saída deve conter os comandos output AND comandos propriamente ditos.

Eu encontrei

#!/bin/bash -x

mas isso não é exatamente o mesmo porque em vez de

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

mostra

+ mysql -v dbname
+ grep 'CREATE TABLE'
    
por Putnik 07.02.2012 / 14:21

2 respostas

23

Use bash -v .

Este é o script:

#!/bin/bash -v

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

echo "Done."

Esta é a saída:

#!/bin/bash -v

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

echo "Done."
Done.

Infelizmente, não há um marcador especial como PS4 para imprimir comandos expandidos. Você pode combinar os dois para identificar rapidamente os comandos:

#!/bin/bash -vx

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

echo "Done."
+ echo Done.
Done.
    
por 07.02.2012 / 14:54
8

set -x é outra maneira de fazer isso.

$ cat a.sh
#!/bin/bash

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

A saída será:

sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.
    
por 07.02.2012 / 18:22