Saya sudah memulai proses panjang melalui terminal. Apakah mungkin membuat terminal Ubuntu mengeluarkan suara setelah prosesnya selesai? Dengan cara ini, saya tidak perlu terus memeriksa, tetapi sebaliknya akan diberitahu melalui suara.
Saya sudah memulai proses panjang melalui terminal. Apakah mungkin membuat terminal Ubuntu mengeluarkan suara setelah prosesnya selesai? Dengan cara ini, saya tidak perlu terus memeriksa, tetapi sebaliknya akan diberitahu melalui suara.
Jawaban:
Setidaknya ada tiga cara baris perintah untuk mencapai hal ini dengan menempatkan perintah suiting di akhir skrip Anda, Anda dapat meminta proses panjang Anda:
Cara "klasik" untuk memainkan suara adalah dengan menggunakan bip melalui pengeras suara PC. Namun ini tidak akan berfungsi dalam semua kasus (mis. Di sistem saya speaker PC sepenuhnya dinonaktifkan) dan Anda perlu menghapus pscpkr dari /etc/modprobe/blacklist.conf
dan memuat pcspkr
modul kernel.
sudo sed -i 's/blacklist pcspkr/#blacklist pcspkr/g' /etc/modprobe.d/blacklist.conf
sudo modprobe pcspkr
beep [optional parameters]
Kami juga dapat memutar file suara apa pun dalam format wav menggunakan aplay (diinstal secara default):
aplay /usr/share/sounds/alsa/Side_Right.wav
Cara lain adalah dengan menggunakan antarmuka baris perintah pulseaudio untuk memungkinkan pemutaran file suara apa pun yang libsndfile
dikenali oleh sistem Anda pada output audio default:
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
Kita dapat menggunakan file suara default dari /usr/share/sounds/
, atau file suara lain yang mungkin kita miliki di lokasi yang berbeda.
Untuk menyebutkannya, ada cara lain yang bagus untuk mencapai ini dengan menyalahgunakan espeak , yang diinstal secara default di Ubuntu <= 12,04. Lihat, atau lebih tepatnya dengarkan contoh berikut:
#! /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"
Di Ubuntu> = 12.10 Orca menggunakan operator bicara. Kami kemudian dapat menginstal espeak , atau gunakan alternatif spd-say "Text"
.
spd-say
.
spd-say
Utilitas diinstal secara default dan berfungsi pada sistem saya.
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
saya menggunakan
make; spd-say done
Ganti "make" dengan perintah jangka panjang apa pun yang Anda gunakan.
spd-say 'get back to work
' Dan juga sudah diinstal sebelumnya: rilis.ubuntu.com/trusty/… , untuk orang buta saya kira? Dan -w
untuk loop tak terbatas: while true; do spd-say -w 'get back to work you lazy bum'; done
.
Untuk memainkan suara setelah perintah selesai:
long-running-command; sn3
(di mana sn3
suara nomor 3) masukkan ini .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
}
Atau baca di bawah untuk opsi lebih lanjut:
Inilah yang saya gunakan untuk persis apa yang Anda minta - dengan satu perbedaan: tidak hanya memainkan suara ketika perintah selesai tetapi memainkan suara yang berbeda pada keberhasilan dan kesalahan. (Tetapi Anda dapat mengubahnya jika Anda tidak menyukainya.)
Saya memiliki fungsi Bash yang disebut oks
yang saya gunakan di akhir perintah yang berjalan lama:
make && make test && make install; oks
Ini memainkan suara dan menampilkan OK atau ERROR (dengan kode kesalahan) ketika perintah sebelumnya selesai.
Inilah fungsi dengan dua pembantu:
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
}
Anda dapat meletakkannya di ~ / .bashrc Anda secara langsung atau memasukkannya ke file lain dan kemudian letakkan baris ini di ~ / .bashrc Anda:
. ~/path/to/file/with/function
Ubah sound_ok
dan sound_error
ke beberapa suara lainnya.
Anda dapat bereksperimen dengan sound
vs. soundbg
dan mengubah sound_ok
dan sound_error
menggunakan urutan banyak suara yang Anda sukai untuk mendapatkan hasil yang Anda inginkan.
Untuk menemukan beberapa suara yang bagus di sistem Anda, Anda dapat mencoba:
for i in /usr/share/sounds/*/stereo/*; do echo $i; paplay $i; sleep 1; done
Berikut adalah beberapa suara yang sering saya gunakan yang tersedia di Ubuntu secara default yang bagus untuk notifikasi - sn1 keras dan bagus, sn2 sangat keras dan masih cukup bagus, sn3 sangat keras dan tidak begitu baik:
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
}
Sekali lagi, Anda dapat mengubah sound
ke soundbg
jika Anda ingin memainkannya di latar belakang tanpa menunggu suara selesai (misalnya untuk tidak memperlambat skrip Anda ketika Anda memainkan banyak suara).
Dan untuk berjaga-jaga - di sini adalah fungsi yang sama oks
tetapi tanpa suara:
ok() {
# prints OK or ERROR and exit status of previous command
s=$?
if [[ $s = 0 ]]; then
echo OK
else
echo ERROR: $s
fi
}
Inilah cara Anda menggunakannya:
Contoh dengan sukses:
ls / && ls /bin && ls /usr; oks
contoh dengan kesalahan:
ls / && ls /bim && ls /usr; oks
Tentu saja dalam praktiknya perintahnya lebih seperti:
make && make test && make install; oks
tapi saya menggunakan ls
sehingga Anda bisa dengan cepat melihat cara kerjanya.
Anda dapat menggunakan ok
alih-alih oks
untuk versi diam.
Atau Anda dapat menggunakan mis:
ls / && ls /bim && ls /usr; ok; sn1
untuk mencetak OK / KESALAHAN tetapi selalu memainkan suara yang sama, dll.
Saya meletakkan fungsi-fungsi itu di GitHub, lihat:
Sumber dapat diunduh dari:
Saya menambahkan soundloop
fungsi ke repo di atas. Memainkan suara dan dapat terganggu oleh Ctrl + C (tidak seperti yang sederhana while true; do paplay file.ogg; done
yang diharapkan akan berfungsi tetapi tidak) seperti yang diminta oleh shadi dalam komentar. Diimplementasikan sebagai:
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
}
Jika menurut Anda rumit, harap arahkan keluhan Anda ke pengembang PulseAudio.
while true; do paplay ...; done
sehingga suara berulang sampai saya tekan Ctrl+C
, tetapi ketika saya melakukannya, itu tidak pecah. Saya tidak dapat menemukan opsi khusus man paplay
untuk mencari cara agar ini berfungsi. Ada ide?
Menurut ini yang \a
karakter lolos kode ASCII 7, yang merupakan bip komputer.
Jadi echo $'\a'
berfungsi untuk membuat suara bip pada mesin lokal saya, bahkan ketika itu dieksekusi pada bash shell yang berjalan di komputer saya terhubung melalui antarmuka terminal seperti Putty.
Memperluas jawaban Michael Curries, Anda dapat membuat Bash mencetak karakter BEL
( \a
) melalui PROMPT_COMMAND
:
PROMPT_COMMAND='printf \\a'
Pengaturan PROMPT_COMMAND
seperti itu akan membuat Bash mengeksekusi printf \\a
di akhir setiap perintah, yang akan membuat terminal memainkan suara (meskipun seperti yang ditunjukkan muru, cukup memicu redrawal prompt akan membuat terminal memainkan suara, yaitu suara akan dimainkan setiap kali prompt baru ditarik, misalnya bahkan ketika hanya menekan ENTER).
Ini adalah fitur terminal, jadi mungkin tidak berfungsi di semua terminal; misalnya itu tidak berfungsi di konsol (tapi saya yakin itu berhasil gnome-terminal
dan xterm
).
Perintah
speaker-test
membuat suara bising. Solusi paling sederhana namun menjengkelkan. :-)
Lihatlah manualspeaker-test(1)
opsi untuk mengkonfigurasi sinyal noise.
Ini bukan yang Anda minta tetapi Anda bisa menggunakan notifikasi untuk itu.
Ganti perintah yang diberikan dalam jawaban lain dengan
notify-send "Process terminated" "Come back to the terminal, the task is over"
command && (say done ; echo done) || (echo error ; say error)
Contoh 1: echo alik && (say done ; echo done) || (echo error ; say error)
akan menghasilkan kata yang dikerjakan.
Contoh 2: non_existing_command_error && (say done ; echo done) || (echo error ; say error)
akan menghasilkan kata kesalahan.
* Kebutuhan gnustep-gui-runtime
-
sudo apt-get install gnustep-gui-runtime
Tepuk tangan.
Saya membuat skrip sederhana dan hampir asli yang memainkan Suara dan menampilkan Pemberitahuan dengan Pesan dan Waktu yang Diberikan untuk Ubuntu ( Inti ):
#!/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
Buat Direktori baru di rumah Anda dan sebut saja noti
mkdir ~/noti
Unduh noti.sh dan ekstrak ke noti
dir di atas .
Buka Terminal dan Ubah Direktori untuk noti
cd ~/noti
Jadikan noti.sh dapat dieksekusi dengan mengeluarkan:
sudo chmod +x noti.sh
Jalankan Tes seperti ini:
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"
gelombang sinus ffmpeg
Untuk para minimalis di luar sana, Anda dapat memainkan sinus 1000 Hz selama 5 detik:
sudo apt-get install ffmpeg
ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp
atau selamanya sampai Anda melakukan Ctrl-C:
ffplay -f lavfi -i "sine=frequency=1000" -nodisp
Informasi lebih lanjut di: https://stackoverflow.com/questions/5109038/linux-sine-wave-audio-generator/57610684#57610684
Diuji di Ubuntu 18.04, ffmpeg 3.4.6.