
私は 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
何も変わっていません。
編集:
シェルの内部に関連していることに気づきました。
- https://stackoverflow.com/questions/81520/how-to-suppress-terminated-message-after-killing-in-bash
- https://stackoverflow.com/questions/32551713/how-can-i-silence-the-terminated-message-when-my-command-is-killed-by-timeout
- https://unix.stackexchange.com/questions/65902/why-does-bash-show-terminated-after-killing-a-process
どうやって克服すればいいのかまだ分からない。
答え1
以下のリンクを読んでください:
ffmpeg
内で実行された行の終了によりGUI button
、GUI の後に bash シェルが終了することがわかりましたt2s
。ブロック内でチャット アップSIGINT
とSIGTERM
シグナルを行い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