如何在gnu屏幕下运行的bash脚本中敲响音频铃声?


19

在屏幕外部的konsole终端窗口中,如果我键入以下内容,则运行一个bash shell,并将TERM设置为konsole-256color:

echo -n $'\ a'或
echo -n $'\ eg'或
./ringbell,其中./ringbell的内容为

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

它们都会导致配置的音频铃声关闭。如果我进入屏幕会话(我的.screenrc也将term设置为konsole-256color),则仅上述3个命令中的第二个命令(echo -n $'\ eg')会导致听到铃声。我需要修改脚本还是屏幕问题?

我拥有的屏幕软件包的Ubuntu版本是4.1.0〜20120320gitdb59704-9。


1
也请参考此问题,尽管我实际上更喜欢Keith的答案。
富兰克林·于

Answers:


25

从内存来看,Ctrl-G是响铃字符,所以我认为这就是第二个起作用的原因。但是屏幕可能会很挑剔,因为它接受Ctrl-A作为命令代码,可以接受哪些字符。

尝试这个

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

我在rosettacode上找到了,希望它会给您一些选择


在屏幕内部或外部均不起作用。如果使用infocmp,则表明没有为TERM konsole-256color定义bel功能,因此这很有意义。尽管屏幕terminfo条目定义了bel,但是tput -T屏幕bel也不起作用。
鲍勃

1
经过更多测试后,看来tput -T屏幕bel确实可以工作。我的初始测试失败,因为我正在屏幕中运行一个屏幕,而外部屏幕没有关闭vbell。感谢您的提示。
鲍勃

0

最佳解决方案: printf '\a'

这是因为printf大多数外壳程序都内置了良好的功能,并且在printfLinux / Mac系统中也安装了等效的可执行版本。

其他选项:如果安装了curses,则还可以使用:tput bel 如果使用bash的最新版本,则可以使用:echo -n '\a'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.