実行中にcomptonを終了するか、実行していない場合は起動するスクリプトを作成しようとします。私はプロセスが見つかったら1を終了する必要があることを読んだので、それを使用するスクリプトを作成しようとしましたが、それはうまくいかず、閉じると起動しますが閉じません。私は何が間違っていましたか? ?
#!/bin/bash
status=$(pgrep compton 2>&1)
if [[ $status == 1 ]];
then
killall compton
else
exec compton -b
fi
echo $status
ベストアンサー1
あなたはいpgrep
変数として出力を取得しますstatus
。これは期待した結果ではありません。
pgrep
指定したパターンに一致するプロセスのプロセスID(PID)を印刷します。名前が一致するプロセスがある場合は、そのプロセスのPIDになります compton
。終了ステータスも返されますが、コマンド置換は終了ステータスを文字列としてキャプチャしません。$status
pgrep
テストではと$status
比較します1
。 PIDがcompton
1の可能性はほとんどありません。
compton
既存のプロセスを終了してcompton -b
プロセスがない場合は、compton
次のように起動できます。
#!/bin/sh
if ! pkill compton; then
exec compton -b
fi
これは終了ステータスを使用しますpkill
。このツールは(通常はペアとして展開およびインストールされています)同じようにpkill
機能しますが、以前と同じように一致するプロセスのPIDを出力するのではなく、デフォルトで一致するプロセスにシグナルを送信します。pgrep
pgrep
pkill
TERM
このif
キーワードは、一緒に使用されるコマンドの終了状態を使用します。
!
テストの意味を裏返して
成功すると、
pkill compton
次があることを意味します。以前は1 つ以上のcompton
プロセスが終了したか、少なくとも信号を受信したため、exec compton -b
実行されません。失敗した場合
pkill compton
(名前と一致するプロセスがない場合、または内部エラーがある場合pkill
)、ステートメント本文はif
yoursを呼び出してexec compton -b
シェルプロセスを実行して生成されたプロセスに置き換えますcompton -b
。