Я начал долгий процесс через терминал. Можно ли заставить терминал Ubuntu издавать звук после завершения процесса? Таким образом, мне не нужно постоянно проверять, но вместо этого я получу уведомление через звук.
Существует по крайней мере три командных строки способы выполнить это путем помещения подходящей команды в конце сценария, который можно вызвать для долгого процесса:
"классический" способ играть звук состоит в том, чтобы использовать звуковой сигнал через динамики компьютера. Однако это не будет работать во всех случаях (например, в моей системе динамики компьютера полностью отключены), и необходимо будет удалить pscpkr от /etc/modprobe/blacklist.conf
и загрузиться pcspkr
модуль ядра.
sudo sed -i 's/blacklist pcspkr/#blacklist pcspkr/g' /etc/modprobe.d/blacklist.conf
sudo modprobe pcspkr
beep [optional parameters]
Мы можем также играть любой звуковой файл в 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 говорить-диспетчеров использования Косатки. Мы можем затем установить espeak или альтернативно использовать spd-say "Text"
.
Команда
speaker-test
шумит звук. Самое простое но раздражающее решение. :-)
Взгляд руководство speaker-test(1)
для опций настроить шумовой сигнал.
Подробно останавливаясь на ответе Michael Curries, Вы могли заставить Bash распечатать BEL
символ (\a
) до PROMPT_COMMAND
:
PROMPT_COMMAND='printf \\a'
Установка PROMPT_COMMAND
тот путь заставит Bash выполниться printf \\a
в конце каждой команды, которая заставит терминал играть звук (хотя, поскольку muru указывает, просто инициировать redrawal подсказки заставит терминал играть звук, т.е. звук будет играться каждый раз, когда новая подсказка оттянута, например, даже когда просто удар ВХОДИТ ).
Это - терминальная функция, таким образом, она не могла бы работать через все терминалы; например, это не работает в консоли (но я уверен, что это работает в gnome-terminal
и xterm
).
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
Аплодисменты.
Для проигрывания звука после, команда заканчивается:
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
Это играет звук и отображается хорошо или ОШИБКА (с кодом ошибки), когда предыдущая команда заканчивается.
Вот то, что функция с двумя помощниками:
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:
. ~/path/to/file/with/function
Изменение sound_ok
и sound_error
к некоторым другим звукам.
Можно экспериментировать с sound
по сравнению с. 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/ошибку, но всегда играть тот же звук, и т.д.
Я поместил те функции на GitHub, вижу:
Источник может быть загружен с:
Я добавил a soundloop
функционируйте к вышеупомянутому repo. Это играет звук и может быть прервано 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.
Я использую
make; spd-say done
, Замена "делает" с любой продолжительной командой, которую Вы используете.
ffmpeg синусоидальная волна
Для минималистов там, можно играть синус на 1 000 Гц в течение 5 секунд:
sudo apt-get install ffmpeg
ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp
или навсегда пока Вы не делаете Ctrl-C:
ffplay -f lavfi -i "sine=frequency=1000" -nodisp
[еще 116] информация в: https://stackoverflow.com/questions/5109038/linux-sine-wave-audio-generator/57610684#57610684
, Протестированный в Ubuntu 18.04, ffmpeg 3.4.6.
Согласно этому \a
символ выходит из кода ASCII 7, который является звуковым сигналом компьютера.
Так echo $'\a'
работы, чтобы заставить звуковой сигнал звучать на моей локальной машине, даже когда это выполняется на оболочке удара, работающей на компьютере, я подключен с через терминальный интерфейс как PuTTY.
Это не то, что Вы спросили, но Вы могли использовать уведомление для этого.
Замените команду, данную в других ответах с
notify-send "Process terminated" "Come back to the terminal, the task is over"
Я создал простой и почти собственный сценарий, который играет Звук и отображает Уведомление с Данным сообщением и Время для Ubuntu (Суть):
#!/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.
Откройте Terminal и Change Directory к 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"
Воспроизвести звук ASCII Bell Character :
echo -e "\a"
Сделать это после длинной команды, имитируемой sleep 2
здесь:
sleep 2; echo -e "\a"
ВЫПОЛНЕНО!
Чтобы упростить использование, добавьте это в конец вашего файла ~ / .bashrc
(создайте этот файл, если он не существует). Или, если вы используете Ubuntu, добавьте его вместо этого в свой файл ~ / .bash_aliases
(который импортируется файлом Ubuntu по умолчанию ~ / .bashrc
) , как я делаю в моем ~ / .bash_aliases
здесь :
# Play sound; very useful to add to the end of a long cmd you want to be notified of when it completes!
# Ex: `long_cmd; gs_sound_bell` will play a bell sound when `long_cmd` completes!
alias gs_sound_bell="echo -e \"\a\""
# Even better, have a pop-up notification too!
# Ex: `long_cmd; gs_alert` will play the sound above *and* pop up a notification when complete!
# See more details & a screenshot of the popup on my answer here:
# https://askubuntu.com/questions/277215/how-to-make-a-sound-once-a-process-is-complete/1213564#1213564
# For other popup window options, see my other answer here:
# https://superuser.com/questions/31917/is-there-a-way-to-show-notification-from-bash-script-in-ubuntu/1310142#1310142
alias gs_alert="gs_sound_bell; alert \"task complete\""
Обратите внимание, что мой псевдоним gs_alert
вызывает alert
, поэтому вам также необходимо определить этот псевдоним. Этот псевдоним определен по умолчанию в Ubuntu.Но если в вашем файле ~ / .bashrc
его еще нет в верхней части, добавьте его чуть выше кода выше. Опять же, эти строки используются по умолчанию в вашем файле ~ / .bashrc
в Ubuntu 18 или 20, например:
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
Закройте и снова откройте свой терминал или позвоните . ~ / .bashrc
, чтобы повторно "источник" файла, затем протестируйте его следующим образом:
sleep 2; gs_alert
Через 2 секунды вы услышите звук колокольчика и увидите всплывающее окно вверху экрана:
Если вы когда-нибудь забудете, что содержится в вашем псевдониме, вы можете увидеть, что находится в каждом из них, запустив следующее:
# See the definitions for ALL aliases you have defined!
alias
# See just the definitions for specific aliases. Ex:
alias gs_sound_bell
alias gs_alert
alias alert
# get alerted when `my_long_cmd` finishes! Ex: building software.
my_long_cmd; gs_alert
gs_
в начале каждого псевдонима мои инициалы. Я добавляю сюда свои собственные команды и псевдонимы, чтобы их было легко найти: теперь я могу просто набрать gs_
в терминале, затем нажать Tab Tab ( Tab дважды), чтобы увидеть распечатку всех моих пользовательских команд. домашний
каталог . Просто добавив интересную идею, которую я видел реализованной в некоторых скриптах, используя системный колокол:
tput bel
он будет звонить в системный колокол, который (по крайней мере, в konsole) показывает уведомление, если вы не смотрите терминал, и ничего не делает, если вы его смотрите (в старых терминах он может звонить в настоящий колокол). согласно этот quesiton он очень портативный, он даже работает в macOS и не нуждается в установке.