gnu screen で実行されている bash スクリプト内でオーディオベルを鳴らすにはどうすればよいですか?

gnu screen で実行されている bash スクリプト内でオーディオベルを鳴らすにはどうすればよいですか?

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

echo -n $'\a'

または

echo -n $'\eg'

または

./ringbell.sh

の内容ringbell.sh

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

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

screen 4.1.0~20120320gitdb59704-9Ubuntuから使用しています。

答え1

記憶によれば、Ctrl-G はベル文字なので、2 番目の方法が機能したのはそのためだと思います。ただし、screen は Ctrl-A をコマンド コードとして受け取るため、受け入れる文字を厳選する場合があります。

これを試して

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

私はこれを見つけましたロゼッタコード、いくつかの選択肢が見つかるといいのですが

答え2

最適な解決策:printf '\a'

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

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

関連情報