问题是:
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