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'

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.

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.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.