while 루프를 사용하여 이를 수행하는 방법

while 루프를 사용하여 이를 수행하는 방법

문제는 다음과 같습니다

grepFirefox 인스턴스 출력의 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

관련 정보