답변:
해결책:
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
(ldd $2/bin/* || true) | grep "not found" | wc -l
스크립트가 ldd 반환 실패 시이 줄 다음에 종료됩니다
(ldd $2/bin/* || true) | grep "not found" | wc -l || true
set -o pipefail
. 때 grep
발견 아무것도, 그것은 0이 아닌 종료 코드를 반환하고 쉘 전체 파이프가 0이 아닌 종료 코드를 가지고 있다고 생각하는 것이 충분하다.
멈추지 말고 종료 상태를 저장하십시오.
특정 명령이 실패한 경우 스크립트를 중지하지 않고 실패한 명령의 오류 코드를 저장하려는 경우를 대비하여 :
set -e
EXIT_CODE=0
command || EXIT_CODE=$?
echo $EXIT_CODE
command
는 성공적이었고 이후의 것을 실행할 필요가 있기 때문입니다 ||
. 다음과 같이 읽으십시오 : command
실패하면 EXIT_CODE=$?
. command || echo "$?"
더 자세한 디버깅을 위해 "트랩"을 사용하거나 사용할 수 있습니다 .
더 간결하게 :
! particular_script
(강조 광산) 에 관한 POSIX 사양 에서 set -e
:
이 옵션이 켜져 있으면 쉘 오류 결과에 나열된 이유로 간단한 명령이 실패하거나 종료 상태 값> 0을 리턴하고 while, until 또는 if 키워드 뒤에 오는 복합 목록의 일부가 아닌 경우 AND 또는 OR 목록의 일부가 아니며 !가 앞에 오는 파이프 라인이 아닙니다 . 예약어 이면 쉘이 즉시 종료됩니다.
-e
합니다.
!
의지가 쉘이 무엇이든 나가지 못하게 한다는 것입니다. 이 스크립트 는 스크립트를Still alive!
실행할 때 스크립트가 완료되었음을 나타내는 메시지를 표시합니다 . 다른 행동을보고 있습니까?
if
절에 넣고 문제를 해결했습니다.
"true"를 반환하는 대신 "noop"또는 null 유틸리티 ( POSIX 사양 참조 )를 사용 :
하고 "아무 것도하지 않음"을 사용할 수도 있습니다. 당신은 몇 글자를 저장합니다. :)
#!/usr/bin/env bash
set -e
man nonexistentghing || :
echo "It's ok.."
output=$(*command* 2>&1) && exit_status=$? || exit_status=$?
echo $output
echo $exit_status
이것을 사용하여 로그 파일을 작성하는 예
log_event(){
timestamp=$(date '+%D %T') #mm/dd/yy HH:MM:SS
echo -e "($timestamp) $event" >> "$log_file"
}
output=$(*command* 2>&1) && exit_status=$? || exit_status=$?
if [ "$exit_status" = 0 ]
then
event="$output"
log_event
else
event="ERROR $output"
log_event
fi
위의 간단한 해결책에 감사드립니다.
<particular_script/command> || true
스크립트 단계 및 추가 흐름 제어 옵션의 추가 작업 / 문제 해결에 다음 구성을 사용할 수 있습니다.
if <particular_script/command>
then
echo "<particular_script/command> is fine!"
else
echo "<particular_script/command> failed!"
#exit 1
fi
exit 1
필요한 경우 추가 조치를 제동 할 수 있습니다 .
-e
속성이 실패 명령이 즉시 다음 명령 목록의 일부인 경우 "로 설정while
하거나until
키워드를에서 시험의 일부if
진술은, 어떤 명령의 일부로 실행 A의&&
또는||
최종 다음 명령을 제외 목록&&
이나||
, 모든 명령 파이프 라인에 있지만 마지막, 또는 명령의 반환 상태가로 반전되고 있는지를!
. "