linux için eşdeğer “echo on”?


27

Bash betiğinde çalışan tüm komutları nasıl stdout edebilirim?

Çıktı, çıktı komutlarını içermelidir VE kendileri komutları.

buldum

#!/bin/bash -x

ama bu tam olarak aynı değil çünkü

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

gösteriyor

+ mysql -v dbname
+ grep 'CREATE TABLE'

Yanıtlar:


29

Kullanın bash -v.

Bu komut dosyası:

#!/bin/bash -v

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

echo "Done."

Bu çıktı:

#!/bin/bash -v

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

echo "Done."
Done.

Ne yazık ki, PS4genişletilmiş komutları yazdırmak gibi özel bir işaretleyici yoktur . Her ikisini de komutları hızlıca tanımlamak için olsa da birleştirebilirsiniz:

#!/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 bunu yapmanın başka bir yoludur.

$ cat a.sh
#!/bin/bash

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

Çıktı olacak:

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

1
Bu, OP'nin sorusunda tam anlamıyla reddettiği türden bir şey ...
Daniel Beck

@ Ashok Lütfen açıklayabilir misiniz? Farkı göremiyorum: burada ps: GNU bash, sürüm 4.1.5 (1) - yayınlanma (i486-pc-linux-gnu) Ubuntu 10.04.3
Putnik

1
@Putnik Aynı temel şeydir, ancak set -xsenaryodaki herhangi bir yeri ve hatta tekrar devre dışı bırakabilirsiniz . Yani sadece echo "Done"hatta istiyorsan , set -xhemen öncekine koy .
Daniel Beck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.