Я начал длительный процесс через терминал. Можно ли сделать терминал Ubuntu звуком после завершения процесса? Таким образом, мне не нужно продолжать проверку, но вместо этого будет уведомляться через звук.
Я использую
make; spd-say done
Замените «make» на любую длинную команду, которую вы используете.
В соответствии с этим символ \a ускользает от ASCII-кода 7, который является звуковым сигналом компьютера.
Таким образом, echo $'\a' работает, чтобы сделать звуковой сигнал на моей локальной машине, даже когда он выполнен на bash на компьютере, с которым я подключен через интерфейс терминала, например PuTTY.
Чтобы воспроизвести звук после завершения команды:
long-running-command; sn3
(где sn3 - номер звука 3) поместите это в .bashrc:
sound() {
# plays sounds in sequence and waits for them to finish
for s in $@; do
paplay $s
done
}
sn1() {
sound /usr/share/sounds/ubuntu/stereo/dialog-information.ogg
}
sn2() {
sound /usr/share/sounds/freedesktop/stereo/complete.oga
}
sn3() {
sound /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
Или читайте ниже для получения дополнительных опций:
Вот что я использую именно для того, что вы просите - с одной разницей : он не только воспроизводит звук, когда команда заканчивается, но и воспроизводит другой звук при успехе и ошибке. (Но вы можете изменить его, если вам это не нравится.)
У меня есть функция Bash под названием oks, которую я использую в конце длинных команд:
make && make test && make install; oks
Он воспроизводит звук и отображает OK или ERROR (с кодом ошибки), когда предыдущая команда заканчивается.
Вот эта функция с двумя помощниками:
sound() {
# plays sounds in sequence and waits for them to finish
for s in $@; do
paplay $s
done
}
soundbg() {
# plays all sounds at the same time in the background
for s in $@; do
# you may need to change 0 to 1 or something else:
pacmd play-file $s 0 >/dev/null
done
}
oks() {
# like ok but with sounds
s=$?
sound_ok=/usr/share/sounds/ubuntu/stereo/dialog-information.ogg
sound_error=/usr/share/sounds/ubuntu/stereo/dialog-warning.ogg
if [[ $s = 0 ]]; then
echo OK
soundbg $sound_ok
else
echo ERROR: $s
soundbg $sound_error
fi
}
Вы можете поместить его прямо в ~ / .bashrc или поместить в другой файл, а затем поместите эту строку в свой ~ / .bashrc:
Измените sound_ok и sound_error на некоторые другие звуки.
Вы можете поэкспериментировать с sound vs. soundbg и сменить sound_ok и sound_error использовать последовательности из многих звуков, которые вам нравятся, чтобы получить нужный результат.
Чтобы найти хорошие звуки в вашей системе, вы можете попробовать:
for i in /usr/share/sounds/*/stereo/*; do echo $i; paplay $i; sleep 1; done
Вот некоторые звуки, которые я часто использую, которые доступны на Ubuntu по умолчанию, которые хороши для уведомлений - sn1 громкий и приятный, sn2 очень громкий и все еще довольно приятный, sn3 - очень громкий и не очень приятный:
sn1() {
sound /usr/share/sounds/ubuntu/stereo/dialog-information.ogg
}
sn2() {
sound /usr/share/sounds/freedesktop/stereo/complete.oga
}
sn3() {
sound /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
Опять же, вы можете изменить sound на soundbg, если вы хотите воспроизвести его в фоновом режиме, не дожидаясь окончания звука (например,
И на всякий случай - вот такая же функция, как oks, но без звуков: [ ! d21]
ok() {
# prints OK or ERROR and exit status of previous command
s=$?
if [[ $s = 0 ]]; then
echo OK
else
echo ERROR: $s
fi
}
Вот как вы его используете:
Пример с успехом:
ls / && ls /bin && ls /usr; oks
пример с ошибкой: [ ! d25]
ls / && ls /bim && ls /usr; oks
Конечно, на практике команды больше похожи:
make && make test && make install; oks
, но я использовал ls, чтобы вы могли быстро увидеть, как это работает.
[d28 ] Вы можете использовать ok вместо oks для тихой версии.Или вы можете использовать, например:
ls / && ls /bim && ls /usr; ok; sn1
для печати OK / ERROR, но всегда играть одинаково звук и т. д.
Я поместил эти функции в GitHub, см.:
https://github.com/rsp/scripts/blob/master /ok-functions.mdИсточник можно загрузить с:
https://github.com/rsp/scripts/blob/master/ok-functions. mdЯ добавил функцию soundloop в вышеупомянутое репо. Он воспроизводит звук и может быть прерван Ctrl + C (в отличие от простого while true; do paplay file.ogg; done, который можно было бы ожидать, но это не так), как задано в комментариях . Это реализовано как:
soundloop() {
set +m
a=`date +%s`
{ paplay $1 & } 2>/dev/null
wait
b=`date +%s`
d=$(($b-$a))
[ $d -eq 0 ] && d=1
while :; do
pacmd play-file $1 0 >/dev/null
sleep $d
done
}
Если вы считаете это сложным, пожалуйста, направьте свои жалобы разработчикам PulseAudio.
Развернувшись на ответе Майкла Керри, вы можете заставить Bash напечатать символ BEL (\a) через PROMPT_COMMAND:
PROMPT_COMMAND='printf \\a'
Установка PROMPT_COMMAND таким образом заставит Bash выполнить [ f6] в конце каждой команды, которая заставит терминал воспроизводить звук (хотя, как указывает муру, просто запуск повторной перемотки подсказки заставит терминал воспроизводить звук, т. е. звук будет воспроизводиться каждый раз, когда появится новое приглашение (например, даже при нажатии ENTER).
Это терминальная функция, поэтому она может не работать во всех терминалах; например, он не работает в консоли (но я уверен, что он работает в gnome-terminal и xterm).
Команда
speaker-test
производит шум. Простое, но раздражающее решение. : -)
Посмотрите руководство по speaker-test(1) для настройки параметров шумового сигнала.
command && (say done ; echo done) || (echo error ; say error)
Пример 1: echo alik && (say done ; echo done) || (echo error ; say error) приведет к завершенному слову.
Пример 2: non_existing_command_error && (say done ; echo done) || (echo error ; say error) приведет к ошибке.
* Требуется -
sudo apt-get install gnustep-gui-runtime
Приветствия.
Это не то, что вы просили, но вы можете использовать для этого уведомление.
Заменить команду, указанную в других ответах, с помощью
notify-send "Process terminated" "Come back to the terminal, the task is over"