setara dengan “echo on” untuk linux?

27

Bagaimana saya bisa mendapatkan stdout semua perintah yang berjalan dalam skrip bash?

Yaitu output harus mengandung perintah output DAN perintah itu sendiri.

saya menemukan

#!/bin/bash -x

tetapi ini tidak persis sama karena bukan

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

itu menunjukkan

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

Jawaban:

29

Gunakan bash -v.

Ini skripnya:

#!/bin/bash -v

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

echo "Done."

Ini adalah output:

#!/bin/bash -v

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

echo "Done."
Done.

Sayangnya, tidak ada penanda khusus seperti PS4untuk mencetak perintah yang diperluas. Anda dapat menggabungkan keduanya untuk mengidentifikasi perintah dengan cepat:

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

set -x adalah cara lain untuk melakukannya.

$ cat a.sh
#!/bin/bash

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

Output akan menjadi:

sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.
Ashok Vairavan
sumber
1
Yang merupakan hal yang oleh OP dianggap tidak berguna dalam pertanyaannya ...
Daniel Beck
@Ashok Bisakah Anda jelaskan? Saya tidak dapat melihat perbedaannya: di sini ps: GNU bash, versi 4.1.5 (1) -release (i486-pc-linux-gnu) Ubuntu 10.04.3
Putnik
1
@ Patnik Ini adalah hal dasar yang sama, tetapi Anda dapat set -xdi mana saja dalam skrip, dan bahkan menonaktifkannya lagi. Jadi jika Anda hanya menginginkannya echo "Done", taruh set -xtepat sebelum yang itu.
Daniel Beck