Jak mogę zadzwonić dzwonkiem audio w skrypcie bash działającym pod ekranem GNU?


19

W oknie terminala konsoli poza ekranem z uruchomioną powłoką bash z ustawionym TERM na konsole-256color, jeśli napiszę:

echo -n $ '\ a' lub
echo -n $ '\ eg np. lub
./ringbell gdzie zawartość ./ringbell jest

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

Wszystkie powodują wyłączenie skonfigurowanego dzwonka audio. Jeśli wejdę w sesję ekranową (mój .screenrc również ustawi termin na konsole-256color), tylko drugie z powyższych 3 poleceń (echo -n $ '\ eg') spowoduje usłyszenie dzwonka audio. Czy muszę zmodyfikować skrypt, czy jest to problem z ekranem?

Wersja ubuntu pakietu ekranu, którą mam, to 4.1.0 ~ 20120320gitdb59704-9.


1
Odwołaj się także do tego pytania , chociaż tak naprawdę wolę odpowiedź Keitha.
Franklin Yu,

Odpowiedzi:


25

Z pamięci Ctrl-G jest postacią dzwonkową, więc myślę, że właśnie dlatego drugi zadziałał. Ale ekran może być wybredny w stosunku do akceptowanych znaków, ponieważ przyjmuje Ctrl-A jako kod polecenia.

Spróbuj tego

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

Znalazłem to na rosettacode , mam nadzieję, że da ci to kilka opcji


To nie działa ani wewnątrz, ani na zewnątrz ekranu. Jeśli użyję infocmp, pokaże mi, że funkcja bela nie jest zdefiniowana dla konsoli TERM konsole-256color, więc ma to sens. Chociaż wpis terminfo na ekranie definiuje bel, bela ekranowa tput -T również nie działa.
Bob

1
Po dalszych testach wydaje się, że belka ekranowa tput -T w końcu działa. Mój początkowy test nie powiódł się, ponieważ działałem na ekranie, a ekran zewnętrzny nie miał wyłączonego dzwonka. Dzięki za wskazówkę.
Bob

0

Najlepsze rozwiązanie: printf '\a'

To dlatego, że printfwbudowane w większość powłok działa dobrze, a także istnieje równoważna wykonywalna wersja printfzainstalowana z systemami Linux / Mac.

Inne opcje: Jeśli masz zainstalowane klątwy, możesz także użyć: tput bel Jeśli używasz najnowszej wersji bash, możesz użyć:echo -n '\a'

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.