启动 bash 文件后,在第一个命令后退出并显示“终止”消息,尽管它在终端内运行良好

启动 bash 文件后,在第一个命令后退出并显示“终止”消息,尽管它在终端内运行良好

我在 Ubuntu 22.04 平台上。我用 c 语言创建了一个简单的按钮 GUI,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

什么都没改变。

编辑:

我注意到它与 shell 内部相关。

我还是不知道该如何克服它。

答案1

阅读以下链接后:

ffmpeg我理解,在 中执行的行终止GUI button会导致 Bash Shell 在 GUI 之后终止t2s。我通过在块内进行聊天SIGINTSIGTERM信号处理解决了该问题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

相关内容