Das Starten der Bash-Datei wird nach dem ersten Befehl mit der Meldung „Beendet“ beendet, während es im Terminal problemlos läuft

Das Starten der Bash-Datei wird nach dem ersten Befehl mit der Meldung „Beendet“ beendet, während es im Terminal problemlos läuft

Ich verwende die Plattform Ubuntu 22.04. Ich habe eine einfache GUI mit Drucktasten in C erstellt t2sund sie dort platziert, ~/.local/binwo der Pfad zur PATHUmgebungsvariable 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 whispercppdie 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.

Ich weiß immer noch nicht, wie ich es überwinden soll.

Antwort1

Nach dem Lesen der folgenden Links:

Ich habe verstanden, dass die Beendigung einer ffmpegZeile, die innerhalb ausgeführt wurde, GUI buttondazu führt, dass die Bash-Shell nach der GUI beendet wird t2s. Ich habe das Problem umgangen, indem ich Chats SIGINTund SIGTERMSignale innerhalb eines trapBlocks 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

verwandte Informationen