38

In a konsole terminal window outside of screen running a bash shell with TERM set to konsole-256color if I type:

echo -n $'\a'

or

echo -n $'\eg'

or

./ringbell.sh

where contents of ringbell.sh is

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

They all result in the configured audio bell going off. If I enter a screen session (my ~/.screenrc also sets TERM=konsole-256color) only the second of the above 3 commands (echo -n $'\eg') result in the audio bell being heard. Do I have to modify the script or is this an issue with screen?

I use screen 4.1.0~20120320gitdb59704-9 from Ubuntu.

1

2 Answers 2

61

From memory, Ctrl-G is the bell character, so I think that's why the second one worked. But screen can be picky over what characters it accepts as it takes Ctrl-A as the command code.

Try this

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

I found this on rosettacode, hopefully it will give you some options

4
  • This doesn't work either inside or outside of screen. If I use infocmp it shows me that the bel capability is not defined for TERM konsole-256color so this makes sense. Although the screen terminfo entry defines bel a tput -T screen bel also does not work.
    – Bob
    Sep 3, 2014 at 12:06
  • 1
    After more testing it appears tput -T screen bel does work after all. My initial test failed because I was running a screen within a screen and the outer screen did not have vbell off. Thanks for the the tip.
    – Bob
    Sep 3, 2014 at 13:51
  • This does not work inside a screen session on a remote server logged in via ssh Mar 3, 2022 at 16:08
  • For what it's worth, this did not work for me, initially. It did not work because my terminal, Konsole, is configured, by default, to only sound the bell for "System Notifications." Once I reconfigured the Terminal bell mode of my Konsole profile for System Bell it Just Worked.
    – Bink
    Feb 13 at 18:55
15

Best solution: printf '\a'

That's because the printf built into most shells works well, and there's also an equivalent executable version of printf installed with Linux/Mac systems.

Other options: If you have curses installed, then you can also use: tput bel If you use a recent version of bash, then you can use: echo -e '\a'

2
  • I like terminating final log messages of my console programs with \a regardless of programming language. Aug 7, 2022 at 22:27
  • 1
    echo -e '\a'* Sep 28, 2022 at 20:48

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .