declare -f growl
, как вы, вероятно, знаете, печатает полное определение функции, включая управляющие символы.
Я предлагаю изменить определение, чтобы оно печатало нужные символы без необходимости их буквального включения в определение функции. Команда Bash echo
принимает опцию -e
, которая позволяет ему распознавать escape-последовательности, такие как \a
для символа звонка. info bash
и ищите "echo" для получения дополнительной информации.
(Если вы спрашиваете, как восстановить систему после того, как испортили свой эмулятор терминала, у меня нет ответа.)
РЕДАКТИРОВАТЬ: Я неправильно понял вопрос. Проблема в том, что вы используете синтаксис $'...'
, который расширяет escape-последовательности до реальных управляющих символов. Видимо declare -f
печатает расширенные строки. Только не используйте синтаксис $'...'
.
function growl()
{
echo -n -e '\e]9;'"$@"'\a'
}
('\a'
эквивалентно '\007'
.)
EDIT2: исправлена опечатка
EDIT3: по-видимому, в некоторых версиях bash echo -n -e '\e'
не печатает escape-символ, но '\ 033' работает. Пересмотренное решение:
function growl()
{
echo -n -e '\033]9;'"$@"'\a'
}
(Спрашивающий использует bash 3.2.48. Я подтвердил, что 3.2.25 делает это правильно. Это странно.)