เทียบเท่า“ echo on” สำหรับ linux หรือไม่


27

ฉันจะใช้คำสั่ง stdout ทั้งหมดที่รันใน bash script ได้อย่างไร

นั่นคือเอาต์พุตจะต้องมีคำสั่งเอาต์พุตและคำสั่งด้วยตนเอง

ฉันพบ

#!/bin/bash -x

แต่นี่ไม่ใช่สิ่งเดียวกันเพราะแทนที่จะเป็น

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

มันแสดงให้เห็น

+ mysql -v dbname
+ grep 'CREATE TABLE'

คำตอบ:


29

bash -vใช้

นี่คือสคริปต์:

#!/bin/bash -v

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

echo "Done."

นี่คือผลลัพธ์:

#!/bin/bash -v

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

echo "Done."
Done.

น่าเสียดายที่ไม่มีเครื่องหมายพิเศษเช่นเดียวPS4กับการพิมพ์คำสั่งที่ขยาย คุณสามารถรวมทั้งสองอย่างเพื่อระบุคำสั่งได้อย่างรวดเร็ว:

#!/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 เป็นวิธีอื่นในการทำ

$ cat a.sh
#!/bin/bash

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

ผลลัพธ์จะเป็น:

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

1
ซึ่งชนิดของสิ่งที่ OP ถูกไล่ออกในขณะที่ไม่มีประโยชน์ในคำถามของเขา ...
Daniel Beck

@ Ashok คุณช่วยอธิบายได้ไหม? ฉันไม่เห็นความแตกต่าง: นี่ ps: ทุบตี GNU, รุ่น 4.1.5 (1) - ปล่อย (i486-pc-linux-gnu) Ubuntu 10.04.3
Putnik

1
@Putnik มันเป็นสิ่งพื้นฐานเดียวกัน แต่คุณสามารถทำได้set -xทุกที่ในสคริปต์และแม้กระทั่งปิดการใช้งานอีกครั้ง ดังนั้นหากคุณต้องการมันบนecho "Done"บรรทัดให้ใส่set -xก่อนหน้านั้น
Daniel Beck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.