gnu画面で実行されているbashスクリプト内で音声ベルを鳴らすにはどうすればよいですか?


19

次のように入力すると、TERMがkonsole-256colorに設定されたbashシェルを実行している画面外のkonsoleターミナルウィンドウで:

echo -n $ '\ a'または
echo -n $ '\ eg'または
./ringbellの内容(./ringbellの内容)

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

それらはすべて、設定された音声ベルが鳴るという結果になります。スクリーンセッション(私の.screenrcもtermをkonsole-256colorに設定する)を入力すると、上記の3つのコマンドのうちの2番目(echo -n $ '\ eg')だけでオーディオベルが聞こえます。スクリプトを変更する必要がありますか、これは画面の問題ですか?

私が持っているスクリーンパッケージのubuntuバージョンは4.1.0〜20120320gitdb59704-9です。


1
この質問も参照しください。実際にはキースの答えが好きです。
フランクリンゆう

回答:


25

メモリー上では、Ctrl-Gがベル文字なので、2番目の文字が機能したのはそのためだと思います。しかし、画面は、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も機能しません。
ボブ14

1
さらにテストした結果、tput -T screen belは結局動作するようです。画面内で画面を実行しており、外側の画面でvbellがオフになっていないため、最初のテストは失敗しました。ヒントをありがとう。
ボブ14

0

最適なソリューション: printf '\a'

それは、printfほとんどのシェルに組み込まれているものがうまく機能し、printfLinux / Macシステムにインストールされた同等の実行可能バージョンもあるためです。

その他のオプション:cursesがインストールされている場合は、次のオプションも使用tput bel できます。bashの最新バージョンを使用している場合は、次のオプションを使用できます。echo -n '\a'

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.