다음 옵션을 사용하고 있습니다
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