RUNNING_APPS=$(pgrep -f "somePattern")
echo $?
#results in
1
명령 패스 종료 코드를 0으로 만들려면 어떻게 해야 합니까?
답변1
내 Arch 시스템에서는 pgrep
from 을 (를 procps-ng
) 통해 다음에서 볼 수 있습니다 man pgrep
.
EXIT STATUS
0 One or more processes matched the criteria. For
pkill the process must also have been success‐
fully signalled.
1 No processes matched or none of them could be
signalled.
2 Syntax error in the command line.
3 Fatal error: out of memory etc.
문제는 다음과 같습니다. pgrep
모든 것이 잘 되지만 검색 문자열과 일치하는 프로세스가 없으면 1로 종료됩니다. 이는 다양한 도구를 사용해야 함을 의미합니다. 아마도 Kusalananda가 댓글에서 제안한 것처럼ilkkachu가 답변으로 게시되었습니다.:
running_apps=$(pgrep -f "somePattern" || exit 0)
하지만 제 생각에는 더 좋은 방법은 스크립트를 변경하는 것입니다. 사용하지 말고 set -e
중요한 단계에서는 수동으로 종료하세요. 그런 다음 다음과 같이 사용할 수 있습니다.
running_apps=$(pgrep -fc "somePattern")
if [ "$running_apps" = 0 ]; then
echo "none found"
else
echo "$running_apps running apps"
fi
답변2
AND( ) 또는 OR( ) 연산자 의 왼쪽에는 set -e
해당 명령으로 인해 쉘이 종료되지 않으므로 추가하여 오류를 억제할 수 있습니다.&&
||
|| true
따라서 0
발견된 프로세스는 모두 다음과 같이 출력되어야 합니다(출력 전에 종료되지 않아야 함).
set -e
RUNNING_APPS=$(pgrep -f "somePattern" || true)
echo $?