터미널을 통해 긴 프로세스를 시작했습니다. 프로세스가 완료되면 우분투 터미널에서 소리를 내도록 할 수 있습니까? 이렇게하면 계속 확인하지 않아도되지만 대신 소리로 알려줍니다.
터미널을 통해 긴 프로세스를 시작했습니다. 프로세스가 완료되면 우분투 터미널에서 소리를 내도록 할 수 있습니까? 이렇게하면 계속 확인하지 않아도되지만 대신 소리로 알려줍니다.
답변:
긴 프로세스를 위해 호출 할 수있는 스크립트 끝에 적합한 명령을 넣어서이를 수행하기위한 명령 행 방법은 최소한 세 가지가 있습니다.
소리를 재생하는 "고전적인"방법 은 PC 스피커를 통해 경고음 을 사용하는 것입니다 . 그러나 이것은 모든 경우에 작동하지 않습니다 (예 : 시스템 PC 스피커가 완전히 비활성화 된 경우). 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]
aplay를 사용하여 모든 사운드 파일을 wav 형식으로 재생할 수도 있습니다 (기본적으로 설치됨).
aplay /usr/share/sounds/alsa/Side_Right.wav
또 다른 방법은 pulseaudio 명령 행 인터페이스를 사용하여 시스템 (에서 libsndfile
)이 기본 오디오 출력 에서 인식하는 모든 사운드 파일을 재생할 수 있도록하는 것입니다 .
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
의 기본 사운드 파일 /usr/share/sounds/
이나 다른 위치에있는 다른 사운드 파일을 사용할 수 있습니다.
언급했듯이 우분투 <= 12.04에 기본적으로 설치되는 espeak 를 잘못 사용하여이를 달성하는 또 다른 좋은 방법이 있습니다. 다음 예를 보거나 듣습니다.
#! /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"
우분투에서> = 12.10 Orca는 발언 디스패처를 사용합니다. 그런 다음 espeak 를 설치 하거나 대신 사용할 수 있습니다 spd-say "Text"
.
spd-say
.
spd-say
유틸리티는 기본적으로 설치되며 내 시스템에서 작동합니다.
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
나는 사용한다
make; spd-say done
"make"를 장기 실행 명령으로 바꾸십시오.
spd-say 'get back to work
'. 그리고 미리 설치되어 있습니다 : releases.ubuntu.com/trusty/… , 내가 생각하는 맹인을 위해? 그리고 -w
무한 루프의 경우 : while true; do spd-say -w 'get back to work you lazy bum'; done
.
명령이 완료된 후 소리를 재생하려면
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
}
또는 더 많은 옵션을 보려면 아래를 읽으십시오.
다음은 내가 정확히 요구하는 것에 사용하는 것입니다. 단 하나의 차이점이 있습니다. 명령이 완료되면 소리를 재생하지만 성공과 오류에 따라 다른 소리를 재생합니다 . 그러나 마음에 들지 않으면 변경할 수 있습니다.
oks
장기 실행 명령 끝에 사용 하는 Bash 함수가 있습니다 .
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에 다음 줄을 넣을 수 있습니다.
. ~/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
다음은 기본적으로 우분투에서 기본적으로 제공되는 알림에 적합한 몇 가지 소리입니다. sn1은 크고 훌륭합니다. sn2는 매우 크고 여전히 훌륭합니다.
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
위의 repo에 기능을 추가했습니다 . 주석에서 shadi의while true; do paplay file.ogg; done
요청에 따라 소리를 재생하고 Ctrl + C (단순히 작동하지만 작동하지 않는 것과 달리)에 의해 중단 될 수 있습니다 . 다음과 같이 구현됩니다.
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 개발자에게 알려주십시오.
while true; do paplay ...; done
때까지 소리가 반복되도록 이것을 넣으려고 Ctrl+C
했지만 그럴 때 깨지지 않습니다. man paplay
이 작업을 수행하는 방법을 알아낼 수있는 특별한 옵션을 찾을 수 없습니다 . 어떤 아이디어?
에 따르면 이\a
문자는 컴퓨터의 경고음입니다 ASCII 코드 (7), 이스케이프합니다.
따라서 echo $'\a'
로컬 컴퓨터에서 PuTTY와 같은 터미널 인터페이스를 통해 연결된 컴퓨터에서 실행되는 bash 쉘에서 실행될 때도 경고음이 울립니다.
Michael Curries의 답변을 확장하여 다음을 통해 Bash를 BEL
( \a
) 문자로 만들 수 있습니다 PROMPT_COMMAND
.
PROMPT_COMMAND='printf \\a'
PROMPT_COMMAND
이 방법을 설정 하면 printf \\a
각 명령이 끝날 때마다 Bash가 실행 되어 터미널이 소리를 재생합니다 (muru가 지적하더라도 프롬프트의 다시 그리기를 트리거하면 터미널이 소리를 재생합니다. 즉 소리가 재생됩니다) 예를 들어 ENTER) 만해도 새 프롬프트가 표시 될 때마다
이것은 터미널 기능이므로 모든 터미널에서 작동하지 않을 수 있습니다. 예를 들어 콘솔에서 작동하지 않습니다 (그러나 작동합니다 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
건배.
나는 소리를 재생하고 우분투를위한 주어진 메시지와 시간 ( 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
디렉토리로 추출하십시오 .
터미널을 열고 디렉토리를 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"
ffmpeg 사인파
미니멀리스트의 경우 5 초 동안 1000Hz 사인을 재생할 수 있습니다.
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
자세한 내용은 https://stackoverflow.com/questions/5109038/linux-sine-wave-audio-generator/57610684#57610684
우분투 18.04에서 테스트, ffmpeg 3.4.6.