Чтобы воспроизвести звук после завершения команды:
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.