[linux] 특정 명령에 대한 배쉬 무시 오류

다음 옵션을 사용하고 있습니다

set -o pipefail
set -e

bash 스크립트에서 오류 발생시 실행을 중지합니다. ~ 100 줄의 스크립트가 실행 중이고 스크립트의 모든 줄의 반환 코드를 확인하고 싶지 않습니다.

그러나 하나의 특정 명령에 대해서는 오류를 무시하고 싶습니다. 어떻게해야합니까?



답변

해결책:

particular_script || true

예:

$ cat /tmp/1.sh
particular_script()
{
    false
}

set -e

echo one
particular_script || true
echo two
particular_script
echo three

$ bash /tmp/1.sh
one
two

three 인쇄되지 않습니다.

또한 pipefail켜져 있을 때 파이프의 명령 중 하나가 종료 코드가 아닌 종료 코드를 가질 때 셸이 전체 파이프에 0이 아닌 종료 코드가 있다고 생각하면 충분 pipefail합니다. .

$ set -o pipefail
$ false | true ; echo $?
1
$ set +o pipefail
$ false | true ; echo $?
0


답변

|| true오류를 무시하려는 명령 뒤에 추가하십시오 .


답변

멈추지 말고 종료 상태를 저장하십시오.

특정 명령이 실패한 경우 스크립트를 중지하지 않고 실패한 명령의 오류 코드를 저장하려는 경우를 대비하여 :

set -e
EXIT_CODE=0
command || EXIT_CODE=$?
echo $EXIT_CODE


답변

더 간결하게 :

! particular_script

(강조 광산) 에 관한 POSIX 사양 에서 set -e:

이 옵션이 켜져 있으면 쉘 오류 결과에 나열된 이유로 간단한 명령이 실패하거나 종료 상태 값> 0을 리턴하고 while, until 또는 if 키워드 뒤에 오는 복합 목록의 일부가 아닌 경우 AND 또는 OR 목록의 일부가 아니며 !가 앞에 오는 파이프 라인이 아닙니다 . 예약어 이면 쉘이 즉시 종료됩니다.


답변

“true”를 반환하는 대신 “noop”또는 null 유틸리티 ( POSIX 사양 참조 )를 사용 :하고 “아무 것도하지 않음”을 사용할 수도 있습니다. 당신은 몇 글자를 저장합니다. 🙂

#!/usr/bin/env bash
set -e
man nonexistentghing || :
echo "It's ok.."


답변

당신이 당신의 스크립트 실패를 방지하려면 반환 코드를 수집

command () {
    return 1  # or 0 for success
}

set -e

command && returncode=$? || returncode=$?
echo $returncode

returncode 명령의 성공 여부에 관계없이 수집됩니다.


답변

CLI 도구로 작업 할 때 아래 스 니펫을 사용하고 있으며 일부 리소스가 있는지 여부를 알고 싶지만 출력에 대해서는 신경 쓰지 않습니다.

if [ -z "$(cat no_exist 2>&1 >/dev/null)" ]; then
    echo "none exist actually exist!"
fi