Bagaimana saya bisa membunyikan bel audio dalam skrip bash yang berjalan di bawah layar gnu?

19

Di jendela terminal konsole di luar layar menjalankan bash shell dengan TERM diatur ke konsole-256color jika saya mengetik:

echo -n $ '\ a' atau
echo -n $ '\ eg' atau
./ringbell di mana konten ./ringbell berada

#! / bin / bash
echo -n $ '\ eg'; echo -n $ '\ a'

Mereka semua menghasilkan bel audio yang dikonfigurasi mati. Jika saya memasuki sesi layar (.screenrc saya juga menetapkan istilah untuk konsole-256color) hanya yang kedua dari 3 perintah di atas (echo -n $ '\ eg') menghasilkan bel audio yang didengar. Apakah saya harus memodifikasi skrip atau apakah ini masalah dengan layar?

Versi layar paket ubuntu yang saya miliki adalah 4.1.0 ~ 20120320gitdb59704-9.

Bob
sumber
1
Lihat juga pertanyaan ini , meskipun saya sebenarnya lebih suka jawaban Keith.
Franklin Yu

Jawaban:

25

Dari memori, Ctrl-G adalah karakter bel, jadi saya pikir itu sebabnya yang kedua bekerja. Tetapi layar bisa pilih-pilih karakter apa yang diterimanya karena dibutuhkan Ctrl-A sebagai kode perintah.

Coba ini

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

Saya menemukan ini di rosettacode , semoga akan memberi Anda beberapa opsi

Keith Muggleton
sumber
Ini tidak berfungsi di dalam atau di luar layar. Jika saya menggunakan infocmp itu menunjukkan kepada saya bahwa kemampuan bel tidak didefinisikan untuk TERM konsole-256color jadi ini masuk akal. Meskipun entri terminfo layar menentukan bel tput -T bel layar juga tidak berfungsi.
Bob
1
Setelah pengujian lebih lanjut muncul tput -T bel layar tidak bekerja setelah semua. Tes awal saya gagal karena saya menjalankan layar di dalam layar dan layar luar tidak mematikan. Terima kasih atas tipnya.
Bob
0

Solusi terbaik: printf '\a'

Itu karena printfsebagian besar shell bekerja dengan baik, dan ada juga versi yang dapat dieksekusi setara yang printfdiinstal dengan sistem Linux / Mac.

Opsi lain: Jika kutukan telah diinstal, maka Anda juga dapat menggunakan: tput bel Jika Anda menggunakan versi bash terbaru, maka dapat menggunakan:echo -n '\a'

Pi Marillion
sumber