そのコマンドでプロセスが実行されない場合は、指定されたコマンドを実行する単一のインスタンスと呼ばれる簡単なスクリプトがあります。 elseステートメントの後にコマンドをハードコーディングすると問題なく実行されますが、ハードコーディングされたコマンドを$ 1または$ @に置き換えると、コマンドの新しいインスタンスは生成されません。そのようなコマンドを防ぐためにbashに安全メカニズムがありますか?
#!/bin/bash
if ps ax | grep -v grep | grep $1 > /dev/null;then
wmctrl -xa $1
else
# works fine if I switch $1 to terminator
$1
fi
if文の部分はうまく機能します。このスクリプトを使用してプロセスを呼び出す限り、プロセスのインスタンスは1つだけ取得されます。
答え1
Grep "シングルインスタンス"が呼び出すコマンドの名前を表示するには、grepオプションにデーモンを追加しました。一部のプログラムでは、ウィンドウマネージャにそのインスタンスがなくてもデーモンが実行されているためです。
#!/bin/bash
if ps -fp $(pgrep -d, "$1") egrep -v "single-instance|daemon" | grep $1;then
wmctrl -xa $1
else
$1
fi
この問題を案内してくれたMikelに感謝します。
答え2
何してるの?どのようなデーモンを常に実行しておきますか?たぶんあなたが少し見てみるべきだと思います。システム。