スクリプトファイルを作成し、XFCEグローバルショートカットを使用して呼び出そうとします。 Audacityアプリケーションが停止した場合、スクリプトはアプリケーションを続行し、実行中の場合はスクリプトはアプリケーションを停止する必要があります(録画の一時停止)。これは、VLCの再生/一時停止に同じキーボードショートカットを定義するときに便利です。これにより、再生/一時停止(VLC)と録音/一時停止(Audacity)に同じキーボードショートカットを使用できます。からアイデアを得るこの投稿私は次のスクリプトを書いてXFCEのカスタムキーボード設定に追加しました。しかし、これはうまくいきません。
#!/bin/bash
if pgrep -f "audacity" ;
then
pkill -stop audacity && notify-send "Recording stopped"
else
pkill -cont audacity
答え1
プロセスにSTOPまたはCONT信号を送信するかどうかを知るには、まず現在の状態を知る必要があります。
- 停止したらCONTを送信する必要があります。
- 停止しない場合はSTOPを送信する必要があります。
実行中のプロセスの状態は で確認できますps
。プロセスが停止すると、そのステータス(レポート)に対応するps -ostate=
文字が含まれますT
(等号はps
ヘッダー出力を停止します)。
#!/bin/bash
command="audacity"
pids="$( pgrep "$command" )"
if [[ -z "$pids" ]]; then
printf '"%s" is not running\n' "$command" >&2
exit 1
fi
for pid in $pids; do
state="$( ps -ostate= -p "$pid" )"
stopped=0
case "$state" in
*T*) stopped=1 ;;
esac
if (( stopped )); then
kill -s CONT "$pid"
printf '"%s" (%d) has been unpaused\n' "$command" "$pid"
else
kill -s STOP "$pid"
printf '"%s" (%d) has been paused\n' "$command" "$pid"
fi
done
スクリプトには理論的な競合状態があるため、呼び出しpgrep
間でコマンドが終了する可能性がありますkill
。このような場合、kill
「そのような手続きがない」という不満が出てくる。