Я начал длительный процесс через терминал. Можно ли сделать терминал Ubuntu звуком после завершения процесса? Таким образом, мне не нужно продолжать проверку, но вместо этого будет уведомляться через звук.
Я начал длительный процесс через терминал. Можно ли сделать терминал Ubuntu звуком после завершения процесса? Таким образом, мне не нужно продолжать проверку, но вместо этого будет уведомляться через звук.
Как минимум три способа командной строки выполнить это, поместив команду suiting в конец вашего скрипта, вы можете вызвать для своего длительного процесса:
«Классическим» способом воспроизведения звука является использование beep черездинамикиПК.Однакоэтонебудетработатьвовсехслучаях(например,вмоейсистемегромкоговорителиПКполностьюотключены),ивамнужнобудетудалитьpscpkrиз
/etc/modprobe/blacklist.conf
изагрузитьмодульядраpcspkr
.
sudosed-i's/blacklistpcspkr/#blacklistpcspkr/g'/etc/modprobe.d/blacklist.confsudomodprobepcspkrbeep[optionalparameters]
Мытакжеможемвоспроизводитьлюбойзвуковойфайлвформатеwavспомощьюaplay(поумолчаниюустановлен):
aplay/usr/share/sounds/alsa/Side_Right.wav
Другимспособомявляетсяиспользованиеинтерфейсакоманднойстрокиpulseaudioдлявоспроизведениялюбыхзвуковыхфайлов,которыевашасистема(вlibsndfile
)распознаетзвукпоумолчанию:
paplay/usr/share/sounds/freedesktop/stereo/complete.oga
Мыможемиспользоватьзвуковыефайлыпоумолчаниюиз/usr/share/sounds/
илилюбогодругогозвуковогофайла,которыйможетбытьунасвдругомместе.
Просто,чтобыупомянутьобэтом,естьещеодинхорошийспособдобитьсяэтого,злоупотребляяespeak,которыйпоумолчаниюустановленвUbuntu<=12.04.См.,Вернее,следующийпример:
#! /bin/bash
c=10; while [ $c -ge 0 ]; do espeak $c; let c--; done; sleep 1 ## here lengthy code
espeak "We are done with counting"
В Ubuntu > = 12.10 Orca использует диспетчер сообщений. Затем мы можем установить espeak или, альтернативно, используйте
spd-say "Text"
.
Я использую
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 [email protected]; 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 [email protected]; do
paplay $s
done
}
soundbg() {
# plays all sounds at the same time in the background
for s in [email protected]; 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:
. ~/path/to/file/with/function
Измените 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
, но без звуков:
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
пример с ошибкой:
ls / && ls /bim && ls /usr; oks
Конечно, на практике команды больше похожи:
make && make test && make install; oks
, но я использовал ls
, чтобы вы могли быстро увидеть, как это работает.
Вы можете использовать ok
вместо oks
для бесшумной версии.
Или вы можете использовать, например:
ls / && ls /bim && ls /usr; ok; sn1
для печати OK / ERROR, но всегда воспроизводите один и тот же звук и т. д.
Я помещаю эти функции в GitHub, см.
Источник можно загрузить из:
Я добавил функцию soundloop
в указанное выше репо. Он воспроизводит звук и может быть прерван Ctrl + C (в отличие от простого while true; do paplay file.ogg; done
, которого можно было бы ожидать, но это не так) по запросу shadi в комментариях. Он реализуется как:
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 выполнить printf \a
в конце каждой команды, что заставит терминал воспроизводить звук (хотя, как указывает муру, просто запуск повторной перемотки подсказки заставит терминал играть звук, т. е. звук будет воспроизводиться каждый раз, когда будет вырисовано новое приглашение, например, даже если вы нажмете 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)
приведет к ошибке.
* Требуется gnustep-gui-runtime
-
sudo apt-get install gnustep-gui-runtime
Приветствия.
Это не то, что вы просили, но вы можете использовать для этого уведомление.
Замените команду, указанную в других ответах, на
notify-send "Process terminated" "Come back to the terminal, the task is over"
Я создал простой и почти собственный скрипт, который воспроизводит звук и отображает уведомление с заданным сообщением и временем для Ubuntu ( Gist ):
#!/bin/sh
# https://gist.github.com/John-Almardeny/04fb95eeb969aa46f031457c7815b07d
# Create a Notification With Sound with a Given Message and Time
# The Downloaded Sound is from Notification Sounds https://notificationsounds.com/
MSSG="$1"
TIME="$2"
# install wget if not found
if ! [ -x "$(command -v wget)" ]; then
echo -e "INSTALLING WGET...\n\n"
sudo apt-get install wget
echo -e "\n\n"
fi
# install at package if not found
if ! [ -x "$(command -v at)" ]; then
echo -e "INSTALLING AT...\n\n"
sudo apt-get install at
echo -e "\n\n"
fi
# install sox if not found
if ! [ -x "$(command -v sox)" ]; then
echo -e "INSTALLING SOX...\n\n"
sudo apt-get install sox
sudo apt-get install sox libsox-fmt-all
echo -e "\n\n"
fi
# download the noti sound if this is first time
# add alias to the bashrc file
if ! [ -f ~/noti/sound.mp3 ]; then
echo -e "DOWNLOADING SOUND...\n\n"
touch ~/noti/sound.mp3 | wget -O ~/noti/sound.mp3 "https://notificationsounds.com/wake-up-tones/rise-and-shine-342/download/mp3"
sudo echo "alias noti=\"sh ~/noti/noti.sh\"" >> ~/.bashrc
source ~/.bashrc
echo -e "\n\n"
fi
# notify with the sound playing and particular given message and time
echo "notify-send \""$MSSG\"" && play ~/noti/sound.mp3" | at $TIME
Создайте новый каталог у себя дома и назовите его noti
mkdir ~/noti
Загрузите noti.sh и извлеките его для вышеуказанного noti
dir.
Открыть терминал и изменить каталог на noti
cd ~/noti
Сделайте исполняемый файл noti.sh, выпустив:
sudo chmod +x noti.sh
Запустите тест следующим образом:
sh ~/noti/noti.sh "Test" "now"
noti "Hello From Noti" "now +1 minute"
noti "Hello From Noti" "now +5 minutes"
noti "Hello From Noti" "now + 1 hour"
noti "Hello From Noti" "now + 2 days"
noti "Hello From Noti" "4 PM + 2 days"
noti "Hello From Noti" "now + 3 weeks"
noti "Hello From Noti" "now + 4 months"
noti "Hello From Noti" "4:00 PM"
noti "Hello From Noti" "2:30 AM tomorrow"
noti "Hello From Noti" "2:30 PM Fri"
noti "Hello From Noti" "2:30 PM 25.07.18"
sudo apt-get update; noti "Done" "now"