sudo를 사용하는 bash 스크립트에서 pgrep이 작동하지 않는 이유를 이해하지 못합니다

sudo를 사용하는 bash 스크립트에서 pgrep이 작동하지 않는 이유를 이해하지 못합니다

확대/축소 프로그램이 실행 중인지 감지하려고 합니다. 또한 dpkg를 사용하여 설치하려면 bash 스크립트에 sudo 권한이 필요합니다.

을 사용하면 pgrep -f "zoom" >/dev/null 2>&1Zoom이 실행 중이면 echo $?반환 코드가 0으로 올바르게 설정되고 찾을 수 없으면 1로 올바르게 설정됩니다 .

를 사용하면 sudo두 개의 추가 프로세스, 즉 첫 번째 프로세스와 첫 번째 프로세스 의 하위 프로세스가 pgrep얻어집니다 . 이것은 작동하지 않았기 때문에 "해킹 해결 방법"을 사용해야 했습니다. 작동했습니다. 정규식은 프로세스가 결과에 추가되지 않도록 보장했습니다.sudo pgrep etc.pgrep etc.sudosudo pgrep -f "[z]oom" >/dev/null 2>&1pgrep

이제 프로세스가 실행 중이 아니면 1로 설정되고 프로세스가 실행 중이면 0으로 설정됩니다 sudo pgrep -f "[z]oom" >/dev/null 2>&1 ;. echo $?완벽한.

그러나 이것을 bash 스크립트(로 실행 sudo)에 추가하면 다음과 같습니다.

if pgrep -f "[z]oom" 2>&1 ; then
    echo $?
    echo "zoom is running"

이것은 더 이상 작동하지 않으며언제나스케일링 프로세스가 실행 중임을 나타냅니다. 따라서 스케일링이 실행 중이더라도 항상 0을 반환합니다.아니요달리기).

왜 그런 겁니까?

답변1

문제는 -f.

pgrep -x zoom >/dev/null 2>&1

관련 정보