問題は次のとおりです。
grep
Firefox インスタンス出力のps aux
場合、Firefox がすでに実行されている場合は新しいタブでリンクが開き、Firefox が実行されていない場合は Firefox が実行され、リンクが開きます。
ここで、count変数が1より大きいと言及したことに注意してください。なぜならps aux | grep firefox
、それ自体がリストされるプロセスなので、それ以上の他のインスタンスも同様です。次のスクリプトを実行するとループが発生します。正しい論理は何ですか?
#!/bin/bash
count=0
while [[ $(ps aux | grep firefox) ]]
do
count=$((count+1)) ;
if ( count -gt 1 )
then
nohup firefox --new-tab "mega.nz" &
else
nohup firefox "mega.nz" &
fi
done
while
編集:以下のコメントと回答のおかげで、以下のthrigとDeathgripを使用してループを完全に削除するのに役立ちましたpgrep
。ただし、ループを使用してこれを達成するにはどうすればよいか、またはwhile
ループを使用して実行できないかどうかを教えてくださいwhile
。
答え1
なぜ次のようなものが欲しくないのですか?
#!/bin/bash
count=0
if [[ $(pgrep firefox) ]]
then
nohup firefox --new-tab "mega.nz" &>/dev/null &
else
nohup firefox "mega.nz" &>/dev/null &
fi
スクリプトは編集されていますが、どの条件でループを中断するかはわかりません。
#!/bin/bash
count=0
while [[ $(ps aux | grep firefox) ]]
do
count=$((count+1)) ;
if [ $count -gt 1 ]
then
nohup firefox --new-tab "mega.nz" &
break
else
nohup firefox "mega.nz" &
fi
done