
Estoy en la plataforma Ubuntu 22.04. Hice una GUI de botón simple en c nombrada t2s
y la coloqué en ~/.local/bin
cuya ruta se agrega a la PATH
variable 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 whispercpp
motor 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.
- https://stackoverflow.com/questions/81520/how-to-suppress-terminate-message-after-killing-in-bash
- https://stackoverflow.com/questions/32551713/how-can-i-silence-the-terminate-message-when-my-command-is-killed-by-timeout
- https://unix.stackexchange.com/questions/65902/why-does-bash-show-terminate-after-killing-a-process
Todavía no sé cómo superarlo.
Respuesta1
Después de leer los siguientes enlaces:
Entendí que la terminación de ffmpeg
la línea que se ejecutó GUI button
hace que bash Shell finalice después de t2s
la GUI. Solucioné el problema conversando SIGINT
y enviando SIGTERM
señales dentro de un trap
bloque 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