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.confdan memuat pcspkrmodul 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 libsndfiledikenali 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-sayUtilitas 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 -wuntuk 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 sn3suara 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 oksyang 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_okdan sound_errorke beberapa suara lainnya.
Anda dapat bereksperimen dengan soundvs. soundbgdan mengubah sound_okdan sound_errormenggunakan 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 soundke soundbgjika 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 okstetapi 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 lssehingga Anda bisa dengan cepat melihat cara kerjanya.
Anda dapat menggunakan okalih-alih oksuntuk 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 soundloopfungsi ke repo di atas. Memainkan suara dan dapat terganggu oleh Ctrl + C (tidak seperti yang sederhana while true; do paplay file.ogg; doneyang 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 ...; donesehingga suara berulang sampai saya tekan Ctrl+C, tetapi ketika saya melakukannya, itu tidak pecah. Saya tidak dapat menemukan opsi khusus man paplayuntuk mencari cara agar ini berfungsi. Ada ide?
Menurut ini yang \akarakter 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_COMMANDseperti itu akan membuat Bash mengeksekusi printf \\adi 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-terminaldan 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 notidir 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.