명령이 실패하면 어떻게 종료합니까?
저는 조개껍데기 대본에 능통합니다.메시지를 인쇄하고 명령이 실패하면 스크립트를 종료하려고 합니다.노력했습니다.
my_command && (echo 'my_command failed; exit)
하지만 효과가 없습니다.스크립트의 다음 줄에 따라 명령이 계속 실행됩니다.Ubuntu랑 bash를 쓰고 있어요.
시도해 보십시오.
my_command || { echo 'my_command failed' ; exit 1; }
네 가지 변경 사항이 있습니다.
- 바꾸다
&&
로.||
- 사용하다
{ }
대신해서( )
- 소개하다
;
끝나고exit
그리고. - 뒤에 공백이 있습니다.
{
그리고 그 전에요}
명령이 실패할 때만 메시지를 인쇄하고 종료하려면(값이 0이 아닌 종료) 다음 메시지가 필요합니다.||
한 번도요&&
.
cmd1 && cmd2
실행할 것입니다.cmd2
언제cmd1
successs(예: 값)입니다.0
). 어디인지 확인합니다.
cmd1 || cmd2
실행할 것입니다.cmd2
언제cmd1
fails(0이 아닌 값)입니다.
사용.( )
내부 명령을 하위 쉘로 실행하고 호출합니다.exit
그러면 원래 셸이 아닌 하위 셸이 종료되므로 원래 셸에서 실행이 계속됩니다.
이 용도를 극복합니다.{ }
마지막 두 변경 사항은 bash에 필요합니다.
다른 답변에서는 직접 질문을 잘 다루었지만, 사용에도 관심이 있을 수 있습니다.set -e
. 이렇게 하면 다음과 같은 특정 컨텍스트를 벗어나면 모든 명령이 실패합니다.if
tests)를 선택하면 스크립트가 중단됩니다.특정 스크립트의 경우 매우 유용합니다.
스크립트의 모든 명령에 대해 이 동작을 수행하려면 다음을 추가하십시오.
set -e
set -o pipefail
스크립트 시작 부분에 있습니다.이 옵션 쌍은 명령이 0이 아닌 종료 코드로 반환될 때마다 bash 인터프리터를 종료하도록 지시합니다. 자세한 이유는 다음과 같습니다.pipefail
필요한 경우 http://petereisentraut.blogspot.com/2010/11/pipefail.html)를 참조하십시오.
그러나 종료 메시지를 인쇄할 수는 없습니다.
또한 각 명령의 종료 상태는 셸 변수 $?에 저장되며, 명령을 실행한 후 바로 확인할 수 있습니다.0이 아닌 상태는 실패를 나타냅니다.
my_command
if [ $? -eq 0 ]
then
echo "it worked"
else
echo "it failed"
fi
저는 다음과 같은 숙어를 개발했습니다.
echo "Generating from IDL..."
idlj -fclient -td java/src echo.idl
if [ $? -ne 0 ]; then { echo "Failed, aborting." ; exit 1; } fi
echo "Compiling classes..."
javac *java
if [ $? -ne 0 ]; then { echo "Failed, aborting." ; exit 1; } fi
echo "Done."
각 명령 앞에 정보 에코를 붙이고, 각 명령 앞에 같은 에코를 붙입니다.
if [ $? -ne 0 ];...
줄. (물론 원하는 경우 오류 메시지를 편집할 수 있습니다.)
제공되었습니다.my_command
규범적으로 설계되었습니다. 즉, 성공하면 0을 반환합니다.&&
이겁니다.갖고 싶다고요?||
요.
그리고 이 때 주의해 주세요.(
배쉬할 때는 옳지 않은 것 같지만, 제가 있는 곳에서는 시도할 수 없어요.말해줘.
my_command || {
echo 'my_command failed' ;
exit 1;
}
또한 종료 오류 상태를 유지하고 한 줄에 하나의 명령으로 읽을 수 있는 파일이 있는 경우 다음을 사용할 수 있습니다.
my_command1 || exit
my_command2 || exit
그러나 이렇게 해도 추가 오류 메시지가 인쇄되지 않습니다.그러나 실패한 명령에 의해 오류가 인쇄되는 경우도 있습니다.
»는 다음과 같습니다.trap
셸 빌트인을 사용하면 신호 및 실패한 명령 실행(즉, 0이 아닌 반환 상태)을 비롯한 기타 유용한 조건을 포착할 수 있습니다.따라서 모든 명령어의 반환 상태를 명시적으로 테스트하고 싶지 않은 , 이 명령어의 반환 상태를 명시적으로 테스트하지 않을 수 있습니다.trap "your shell code" ERR
명령이 0이 아닌 상태를 반환할 때마다 셸 코드가 실행됩니다.이겁니다.
trap "echo script failed; exit 1" ERR
한 명령을 잡는 다른 사례와 마찬가지로 파이프라인도 특별한 처리가 필요합니다. 위의 명령어는 수신되지 않습니다. 이겁니다.false | true
요.
용용을 사용합니다.exit
스크립트가 다른 장소(예: 터미널)에서 제공될 수 있으므로 직접 다루기 어려울 수 있습니다.대신 부조각을 사용하는 것이 좋습니다.set -e
게다가 오류는 cout이 아닌 cerr로 들어가야 합니다.) :(cout이 아닌 cerr로 들어갑니다.)
set -e
ERRCODE=0
my_command || ERRCODE=$?
test $ERRCODE == 0 ||
(>&2 echo "My command failed ($ERRCODE)"; exit $ERRCODE)
언급URL : https://stackoverflow.com/questions/3822621/how-to-exit-if-a-command-failed 입니다.
'programing' 카테고리의 다른 글
콘텐츠를 삭제하지 않고 많은 수의 파일을 분할하는 방법 (0) | 2023.05.05 |
---|---|
바이트를 int로 변환하시겠습니까? (0) | 2023.05.05 |
Swift 스크립트에서 터미널 명령을 실행하려면 어떻게 해야 합니까?(예: xcodebuild)입니다. (0) | 2023.04.25 |
네트워크 드라이브의 UNC 경로를 찾으시겠습니까? (0) | 2023.04.25 |
기본 64 문자열을 이미지로 변환하고 저장합니다. (0) | 2023.04.25 |