Запуск bash-файла завершается после первой команды с сообщением «Terminated», хотя в терминале он работает нормально

Запуск bash-файла завершается после первой команды с сообщением «Terminated», хотя в терминале он работает нормально

Я работаю на платформе Ubuntu 22.04. Я сделал простую кнопку GUI в c named t2sи поместил ее в ~/.local/binчей путь добавлен в PATHпеременную окружения. Пока я нажимаю кнопку, она записывает голос с микрофона во временный файл. Когда я отпускаю кнопку, GUI закрывается. Я запускаю следующую строку, которая хорошо работает в терминале:

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

Голос отправляется в whispercppдвижок преобразования речи в текст и транскрибируется. Результат отображается в уведомлении на экране.

Но когда я помещаю эту строку в файл и запускаю его, например:

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

он выполняет только кнопку GUI, когда GUI выходит после отпускания кнопки, он не выполняется

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

часть

Что я делаю не так?

РЕДАКТИРОВАТЬ:

Я также попробовал сделать это так:

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

Ничего не изменилось.

РЕДАКТИРОВАТЬ:

Я заметил, что это связано с внутренним устройством оболочки.

Я до сих пор не знаю, как это преодолеть.

решение1

Прочитав следующие ссылки:

Я понял, что завершение ffmpegстроки, которая была выполнена внутри, GUI buttonприводит к завершению оболочки bash после t2sGUI. Я обошел эту проблему, связав chat up SIGINTи SIGTERMsignals внутри trapблока, а затем поместил в него остальные команды после 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

Связанный контент