이전 명령이 실패한 후에만 bash에서 명령을 실행하는 방법은 무엇입니까? [복사]

이전 명령이 실패한 후에만 bash에서 명령을 실행하는 방법은 무엇입니까? [복사]

&& 연산자를 사용하여 이전 명령이 완료된 후 명령을 실행합니다.

update-system-configuration && restart-service

하지만 이전 명령이 실패한 경우에만 명령을 실행하는 방법은 무엇입니까?

예를 들어, 시스템 구성을 업데이트해야 하는데 실패하는 경우 시스템 관리자에게 이메일을 보내야 합니까?

편집: 어서, 이것은 제어 연산자의 중복 질문이 아닙니다. 이것은 이 질문을 구체적으로 검색하는 사람들에게 도움이 될 것입니다. 제어 운영자 답변도 이 질문에 대한 답변이라는 것을 알고 있지만 실패한 명령을 처리하는 방법을 구체적으로 검색하는 사람들은 거기에 직접 도달하지 못할 것입니다. 그렇지 않으면 묻기 전에 거기에 도달했을 것입니다. 이 질문 질문.

답변1

&&후속 명령은 이전 명령이 성공한 경우에만 실행됩니다. ||그 반대는 사실입니다.

update-system-configuration || echo "Update failed" | mail -s "Help Me" admin@host

문서

에서 man bash:

AND 및 OR 목록은 && 및 ||로 구분된 여러 파이프 중 하나의 시퀀스입니다. 운영자를 개별적으로 제어합니다. AND 및 OR 목록은 왼쪽 연관성으로 수행됩니다. AND 목록의 형식은 다음과 같습니다.

command1 && command2

command2는 command1이 종료 상태 0을 반환하는 경우에만 실행됩니다.

OR 목록의 형식은 다음과 같습니다.

command1 || command2

command2는 command1이 0이 아닌 종료 상태를 반환하는 경우에만 실행됩니다. AND 및 OR 목록의 반환 상태는 목록에서 마지막으로 실행된 명령의 종료 상태입니다.

답변2

"성공"하면 을 반환한다는 의미 0이므로 간단히 테스트해 보세요.

if ! <command>; then
    <ran if unsuccessful>
fi

그 이유는 표준에 따라 프로그램은 문제가 발생하면 0이 아닌 값을 반환하고 성공하면 0을 반환하도록 되어 있기 때문입니다.

또는 반환 변수를 테스트할 수 있습니다 $?.

<command>
if [ $? -ne 0 ]; then
    <ran if unsuccessful>
fi

$?마지막 명령의 반환 코드를 저장합니다.

이제 이것은 if일반적으로 쉘 내장입니다. 따라서 사용하는 쉘에 따라 쉘의 매뉴얼 페이지를 확인해야 합니다.

관련 정보