Al iniciar el archivo bash, se cierra después del primer comando con el mensaje "Terminado" mientras se ejecuta correctamente en la terminal

Al iniciar el archivo bash, se cierra después del primer comando con el mensaje "Terminado" mientras se ejecuta correctamente en la terminal

Estoy en la plataforma Ubuntu 22.04. Hice una GUI de botón simple en c nombrada t2sy la coloqué en ~/.local/bincuya ruta se agrega a la PATHvariable de entorno. Mientras presiono el botón, se graba la voz del micrófono en un archivo temporal. Cuando suelto el botón, la GUI sale. Ejecuto la siguiente línea que funciona bien dentro de la terminal:

 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 )"

La voz se envía al whispercppmotor de voz a texto y se transcribe. El resultado se muestra en la notificación en la pantalla.

Pero cuando coloco esa línea en un archivo y lo ejecuto, como por ejemplo:

 #!/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

solo ejecuta el botón GUI, cuando la GUI sale después de soltar el botón, no se ejecuta

 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 )"

parte

¿Qué estoy haciendo mal?

EDITAR:

También lo probé así:

#!/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

Nada ha cambiado.

EDITAR:

Noté que está relacionado con las partes internas del caparazón.

Todavía no sé cómo superarlo.

Respuesta1

Después de leer los siguientes enlaces:

Entendí que la terminación de ffmpegla línea que se ejecutó GUI buttonhace que bash Shell finalice después de t2sla GUI. Solucioné el problema conversando SIGINTy enviando SIGTERMseñales dentro de un trapbloque y luego coloqué el resto de los comandos en él después de 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

información relacionada