ฉันจะกดกริ่งเสียงภายในสคริปต์ทุบตีที่ทำงานภายใต้หน้าจอ gnu ได้อย่างไร


19

ในหน้าต่างเทอร์มินัล konsole ด้านนอกของหน้าจอรันเชลล์ bash พร้อม TERM ที่ตั้งค่าเป็น konsole-256color หากฉันพิมพ์:

echo -n $ '\ a' หรือ
echo -n $ '\ eg' หรือ ./
ringbell โดยที่เนื้อหาของ. / ringbell เป็น

#! / bin / ทุบตี
echo -n $ '\ eg'; echo -n $ '\ a'

พวกเขาทั้งหมดส่งผลให้เสียงระฆังที่กำหนดค่าจะดับลง หากฉันเข้าสู่เซสชันหน้าจอ (.screenrc ของฉันตั้งค่าคำเป็น konsole-256color) เฉพาะคำสั่งที่สองของ 3 คำสั่งข้างต้น (echo -n $ '\ eg') ส่งผลให้ได้ยินเสียงออด ฉันต้องแก้ไขสคริปต์หรือเป็นปัญหากับหน้าจอหรือไม่

แพ็คเกจหน้าจออูบุนตูที่ฉันมีคือ 4.1.0 ~ 20120320gitdb59704-9


1
โปรดดูคำถามนี้ด้วยแม้ว่าฉันจะชอบคำตอบของ Keith จริงๆ
Franklin Yu

คำตอบ:


25

จากหน่วยความจำ Ctrl-G เป็นตัวละครระฆังดังนั้นฉันคิดว่านั่นเป็นสาเหตุที่ตัวที่สองทำงาน แต่หน้าจอสามารถเลือกได้ว่าตัวละครตัวไหนยอมรับได้เนื่องจากใช้ Ctrl-A เป็นรหัสคำสั่ง

ลองสิ่งนี้

#!/bin/sh
# Ring the terminal bell
# echo "\a" # does not work in some shells
tput bel

ฉันพบสิ่งนี้ในRosettacodeหวังว่ามันจะให้ตัวเลือกแก่คุณ


ไม่สามารถใช้งานได้ทั้งภายในและภายนอกหน้าจอ ถ้าฉันใช้ infocmp แสดงว่าฉันไม่ได้กำหนดความสามารถของ bel สำหรับ TERM konsole-256color ดังนั้นจึงเหมาะสม แม้ว่ารายการ terminfo ของหน้าจอจะกำหนด bel tput -T screen bel ก็ไม่ทำงานเช่นกัน
บ๊อบ

1
หลังจากการทดสอบเพิ่มเติมปรากฏ tput -T หน้าจอ bel ทำงานหลังจากทั้งหมด การทดสอบครั้งแรกของฉันล้มเหลวเนื่องจากฉันใช้งานหน้าจอภายในหน้าจอและจอด้านนอกไม่ได้ปิดเสียง ขอบคุณสำหรับคำแนะนำ
บ๊อบ

0

ทางออกที่ดีที่สุด: printf '\a'

นั่นเป็นเพราะตัวprintfบิวด์ในเชลล์ส่วนใหญ่ทำงานได้ดีและมีเวอร์ชั่นที่เทียบเท่าprintfกับการติดตั้งกับระบบ Linux / Mac

ตัวเลือกอื่น ๆ : หากคุณมีคำสาปติดตั้งคุณสามารถใช้: tput bel หากคุณใช้เวอร์ชันล่าสุดของ bash คุณสามารถใช้:echo -n '\a'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.