Ich habe einen langen Prozess durch ein Terminal gestartet. Ist es möglich, dass das Ubuntu-Terminal nach Abschluss des Vorgangs einen Ton ausgibt? Auf diese Weise muss ich nicht weiter nachsehen, sondern werde durch einen Ton benachrichtigt.
Ich habe einen langen Prozess durch ein Terminal gestartet. Ist es möglich, dass das Ubuntu-Terminal nach Abschluss des Vorgangs einen Ton ausgibt? Auf diese Weise muss ich nicht weiter nachsehen, sondern werde durch einen Ton benachrichtigt.
Antworten:
Es gibt mindestens drei Befehlszeilenmethoden, um dies zu erreichen, indem Sie den entsprechenden Befehl an das Ende Ihres Skripts setzen, das Sie möglicherweise für Ihren langen Prozess aufrufen:
Die "klassische" Art, einen Sound abzuspielen, besteht darin, durch die PC-Lautsprecher zu piepen . Dies funktioniert jedoch nicht in allen Fällen (z. B. bei meinem System sind die PC-Lautsprecher vollständig deaktiviert), und Sie müssen pscpkr entfernen /etc/modprobe/blacklist.conf
und das pcspkr
Kernelmodul laden .
sudo sed -i 's/blacklist pcspkr/#blacklist pcspkr/g' /etc/modprobe.d/blacklist.conf
sudo modprobe pcspkr
beep [optional parameters]
Wir können auch jede Audiodatei im WAV-Format mit aplay abspielen (standardmäßig installiert):
aplay /usr/share/sounds/alsa/Side_Right.wav
Eine andere Möglichkeit besteht darin, die Befehlszeilenschnittstelle von pulseaudio zu verwenden, um die Wiedergabe von Audiodateien zu ermöglichen, die Ihr System (in libsndfile
) bei der Standardaudioausgabe erkennt:
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
Wir können Standard-Audiodateien von /usr/share/sounds/
oder jede andere Audiodatei verwenden , die sich an einem anderen Ort befindet.
Um es nur zu erwähnen, es gibt einen anderen netten Weg, dies durch Missbrauch von espeak zu erreichen , das standardmäßig in Ubuntu <= 12.04 installiert ist. Sehen oder hören Sie das folgende Beispiel:
#! /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"
In Ubuntu> = 12.10 verwendet Orca den Speak-Dispatcher. Wir können dann espeak installieren oder alternativ verwenden spd-say "Text"
.
spd-say
.
spd-say
Dienstprogramm ist standardmäßig installiert und funktioniert auf meinem System.
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
ich benutze
make; spd-say done
Ersetzen Sie "make" durch einen beliebigen Befehl mit langer Laufzeit.
spd-say 'get back to work
'. Und es ist auch vorinstalliert: releases.ubuntu.com/trusty/… , für Blinde, nehme ich an? Und -w
für Endlosschleifen: while true; do spd-say -w 'get back to work you lazy bum'; done
.
So spielen Sie nach Beendigung des Befehls einen Sound ab:
long-running-command; sn3
(wo sn3
ist Ton Nummer 3) setzen Sie dies in .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
}
Oder lesen Sie unten für weitere Optionen:
Hier ist, was ich für genau das verwende, wonach Sie fragen - mit einem Unterschied: Es wird nicht nur ein Ton abgespielt, wenn der Befehl beendet ist, sondern es wird bei Erfolg und bei Fehlern ein anderer Ton abgespielt. (Aber Sie können es ändern, wenn Sie es nicht mögen.)
Ich habe eine Bash-Funktion oks
, die ich am Ende lang laufender Befehle benutze:
make && make test && make install; oks
Es wird ein Ton abgespielt und nach Beendigung des vorherigen Befehls OK oder ERROR (mit Fehlercode) angezeigt.
Hier ist diese Funktion mit zwei Helfern:
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
}
Sie können es direkt in Ihre ~ / .bashrc oder in eine andere Datei einfügen und dann diese Zeile in Ihre ~ / .bashrc einfügen:
. ~/path/to/file/with/function
Ändern Sie sound_ok
und sound_error
zu einigen anderen Tönen.
Sie können mit experimentieren sound
vs. soundbg
und Veränderung sound_ok
und sound_error
Sequenzen von vielen Sounds zu verwenden , die das Ergebnis bekommen , die Sie wollen.
Um ein paar gute Sounds auf Ihrem System zu finden, können Sie versuchen:
for i in /usr/share/sounds/*/stereo/*; do echo $i; paplay $i; sleep 1; done
Hier sind einige Sounds, die ich oft benutze und die standardmäßig auf Ubuntu verfügbar sind und die für Benachrichtigungen gut sind - sn1 ist laut und nett, sn2 ist sehr laut und immer noch ziemlich nett, sn3 ist extrem laut und nicht so nett:
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
}
Auch hier können Sie zu wechseln sound
, soundbg
wenn Sie es im Hintergrund abspielen möchten, ohne darauf zu warten, dass der Sound beendet wird (z. B. um Ihre Skripte nicht zu verlangsamen, wenn Sie viele Sounds abspielen).
Und nur für den Fall - hier ist die gleiche Funktion wie oks
aber ohne Töne:
ok() {
# prints OK or ERROR and exit status of previous command
s=$?
if [[ $s = 0 ]]; then
echo OK
else
echo ERROR: $s
fi
}
So verwenden Sie es:
Beispiel mit Erfolg:
ls / && ls /bin && ls /usr; oks
Beispiel mit Fehler:
ls / && ls /bim && ls /usr; oks
In der Praxis sehen die Befehle natürlich eher so aus:
make && make test && make install; oks
aber ich habe ls
so schnell gesehen wie es funktioniert.
Sie können ok
statt oks
für eine stille Version verwenden.
Oder Sie können zB verwenden:
ls / && ls /bim && ls /usr; ok; sn1
um OK / ERROR zu drucken, aber immer den gleichen Sound abzuspielen usw.
Ich habe diese Funktionen auf GitHub gestellt, siehe:
Die Quelle kann heruntergeladen werden von:
Ich soundloop
habe dem obigen Repo eine Funktion hinzugefügt . Es gibt einen Sound wieder und kann durch Strg + C unterbrochen werden (im Gegensatz zu einem einfachen while true; do paplay file.ogg; done
, von dem man erwarten würde, dass er funktioniert, aber nicht), wie in den Kommentaren von shadi gefordert . Es ist implementiert als:
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
}
Wenn Sie der Meinung sind, dass es kompliziert ist, richten Sie Ihre Beschwerden bitte an die Entwickler von PulseAudio.
while true; do paplay ...; done
so einzustellen, dass sich der Ton wiederholt, bis ich ihn drücke Ctrl+C
, aber wenn ich das tue, bricht er nicht. Ich kann keine speziellen Optionen finden, man paplay
um herauszufinden, wie dies funktioniert. Irgendwelche Ideen?
Nach dieser das \a
Zeichen entkommt ASCII - Code 7, die den Ton des Computers ist.
So echo $'\a'
funktioniert einen Piepton auf meinem lokalen Rechner zu machen, auch wenn es auf einer Bash - Shell läuft auf einem Computer verbunden Ich bin zu über eine Terminal - Schnittstelle wie PuTTY ausgeführt wird .
Erweitern Sie die Antwort von Michael Curries und lassen Sie Bash ein BEL
( \a
) -Zeichen drucken durch PROMPT_COMMAND
:
PROMPT_COMMAND='printf \\a'
Wenn Sie dies PROMPT_COMMAND
so einstellen, wird Bash printf \\a
am Ende jedes Befehls ausgeführt, wodurch das Terminal einen Ton wiedergibt (obwohl das Terminal, wie Muru betont, durch einfaches Auslösen des Neuzeichnens der Eingabeaufforderung den Ton wiedergibt, dh der Ton wird wiedergegeben jedes Mal, wenn eine neue Eingabeaufforderung ausgegeben wird (z. B. auch wenn nur ein Treffer erfolgt ENTER).
Dies ist eine Terminalfunktion, die möglicherweise nicht für alle Terminals funktioniert. Zum Beispiel funktioniert es nicht in der Konsole (aber ich bin sicher, es funktioniert in gnome-terminal
und xterm
).
Der Befehl
speaker-test
macht ein Geräusch. Einfachste, aber nervigste Lösung. :-)
In der Bedienungsanleitung von finden Siespeaker-test(1)
Optionen zum Konfigurieren des Rauschsignals.
Dies ist nicht das, was Sie gefragt haben, aber Sie könnten eine Benachrichtigung dafür verwenden.
Ersetzen Sie den Befehl in den anderen Antworten durch
notify-send "Process terminated" "Come back to the terminal, the task is over"
command && (say done ; echo done) || (echo error ; say error)
Beispiel 1: echo alik && (say done ; echo done) || (echo error ; say error)
ergibt ein erledigtes Wort.
Beispiel 2: non_existing_command_error && (say done ; echo done) || (echo error ; say error)
führt zu einem Fehlerwort.
* Bedürfnisse gnustep-gui-runtime
-
sudo apt-get install gnustep-gui-runtime
Prost.
Ich habe ein einfaches und fast natives Skript erstellt, das Sound wiedergibt und eine Benachrichtigung mit einer bestimmten Nachricht und Uhrzeit für Ubuntu ( Gist ) anzeigt :
#!/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
Erstellen Sie ein neues Verzeichnis bei Ihnen zu Hause und rufen Sie es an noti
mkdir ~/noti
Laden Sie noti.sh herunter und extrahieren Sie es in das oben angegebene Verzeichnisnoti
.
Öffnen Sie das Terminal und wechseln Sie in das Verzeichnis noti
cd ~/noti
Machen Sie noti.sh ausführbar, indem Sie Folgendes ausführen:
sudo chmod +x noti.sh
Führen Sie einen Test wie folgt aus:
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 Sinuswelle
Für die Minimalisten da draußen können Sie 5 Sekunden lang einen 1000-Hz-Sinus spielen:
sudo apt-get install ffmpeg
ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp
oder für immer, bis Sie Strg-C tun:
ffplay -f lavfi -i "sine=frequency=1000" -nodisp
Weitere Informationen finden Sie unter: https://stackoverflow.com/questions/5109038/linux-sine-wave-audio-generator/57610684#57610684
Getestet in Ubuntu 18.04, ffmpeg 3.4.6.