
Ich verwende die Plattform Ubuntu 22.04. Ich habe eine einfache GUI mit Drucktasten in C erstellt t2s
und sie dort platziert, ~/.local/bin
wo der Pfad zur PATH
Umgebungsvariable hinzugefügt wird. Während ich die Taste drücke, wird die Stimme vom Mikrofon in eine temporäre Datei aufgenommen. Wenn ich die Taste loslasse, wird die GUI beendet. Ich führe die folgende Zeile aus, die im Terminal gut funktioniert:
t2s && notify-send -u normal -t 10000 "$( whispercpp -m /home/****/Desktop/2022-10/whisper.cpp/models/ggml-small.bin -nt -l tr -f /dev/shm/mic.wav )"
Die Stimme wird an whispercpp
die Spracherkennungs-Engine gesendet und transkribiert. Das Ergebnis wird in der Benachrichtigung auf dem Bildschirm angezeigt.
Aber wenn ich diese Zeile in eine Datei einfüge und sie starte, etwa:
#!/bin/bash
t2s && notify-send -u normal -t 10000 "$( whispercpp -m /home/****/Desktop/2022-10/whisper.cpp/models/ggml-small.bin -nt -l tr -f /dev/shm/mic.wav )"
exit 0
es führt nur die GUI-Schaltfläche aus. Wenn die GUI nach dem Loslassen der Schaltfläche beendet wird, wird sie nicht ausgeführt
notify-send -u normal -t 10000 "$( whispercpp -m /home/****/Desktop/2022-10/whisper.cpp/models/ggml-small.bin -nt -l tr -f /dev/shm/mic.wav )"
Teil
Was mache ich falsch?
BEARBEITEN:
Ich habe es auch so probiert:
#!/bin/bash
t2s
TEXT=$( whispercpp -m /home/****/Desktop/2022-10/whisper.cpp/models/ggml-small.bin -nt -l tr -f /dev/shm/mic.wav )"
notify-send -u normal -t 10000 $TEXT
Nichts hat sich geändert.
BEARBEITEN:
Mir ist aufgefallen, dass es mit den internen Vorgängen in der Shell zusammenhängt.
- https://stackoverflow.com/questions/81520/how-to-suppress-terminated-message-after-killing-in-bash
- https://stackoverflow.com/questions/32551713/wie-kann-ich-die-terminierte-Nachricht-zum-Stummschalten-wenn-mein-Befehl-durch-ein-Timeout-abgebrochen-wird
- https://unix.stackexchange.com/questions/65902/why-does-bash-show-terminated-after-killing-a-process
Ich weiß immer noch nicht, wie ich es überwinden soll.
Antwort1
Nach dem Lesen der folgenden Links:
Ich habe verstanden, dass die Beendigung einer ffmpeg
Zeile, die innerhalb ausgeführt wurde, GUI button
dazu führt, dass die Bash-Shell nach der GUI beendet wird t2s
. Ich habe das Problem umgangen, indem ich Chats SIGINT
und SIGTERM
Signale innerhalb eines trap
Blocks eingefügt und dann den Rest der Befehle nach Folgendem darin platziert habe t2s
:
#!/bin/bash
trap_with_arg() { # from https://stackoverflow.com/a/2183063/804678
local func="$1"; shift
for sig in "$@"; do
trap "$func $sig" "$sig"
done
}
stop() {
trap - SIGINT EXIT
printf '\n%s\n' "received $1, killing child processes"
notify-send -u normal -t 10000 "$(whispercpp -m /home/**/Desktop/2022-10/whisper.cpp/models/ggml-small.bin -nt -l tr -f /dev/shm/mic.wav )"
kill -s SIGINT 0
}
trap_with_arg 'stop' EXIT SIGINT SIGTERM SIGHUP
t2s
exit 0