Bash: 명령 1이 실패하면 명령 2를 실행합니다.

Bash: 명령 1이 실패하면 명령 2를 실행합니다.

나는 이런 일을하고 싶다 :

if cmd1 && cmd2
echo success
else
echo epic fail
fi

어떻게 해야 하나요?

답변1

이는 귀하의 요구 사항을 충족해야 합니다.

cmd1 && cmd2 && echo success || echo epic fail

또는

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi

답변2

질문의 의사코드가 질문 제목과 일치하지 않습니다.

명령 1이 실패할 경우 명령 2를 실행하는 방법을 실제로 알아야 하는 사람이 있는 경우 다음과 같은 간단한 설명을 따르십시오.

  • cmd1 || cmd2: 이 명령은 실행되며 cmd1, 실패할 경우에도 실행됩니다.cmd2
  • cmd1 && cmd2: 실행됩니다 cmd1. 성공하면 실행됩니다.cmd2
  • cmd1 ; cmd2: 실행 실패 또는 성공 여부에 관계없이 실행 cmd1된 다음 실행됩니다 .cmd2cmd1

완전성을 위해 귀하의 예에서는 then키워드를 놓쳤습니다. 표시하려는 코드는 다음과 같이 작성됩니다.

if cmd1 && cmd2; then echo success; else echo epic fail; fi

이는 다음과 같습니다.

((cmd1 && cmd2) && echo success) || echo epic fail

괄호는 선택사항이므로왼쪽 연관성.

이 코드는 cmd2성공적으로 실행되는 경우에만 실행되며 cmd1, 그렇지 않으면 실패가 직접 에코됩니다.

답변3

Petr Uzel의 말이 맞습니다. 하지만 $?라는 마법을 사용할 수도 있습니다.

$? 마지막으로 실행된 명령의 종료 코드를 저장합니다. 이를 사용하면 스크립팅을 매우 유연하게 할 수 있습니다.

이 질문은 이 주제와 다소 관련이 있습니다.$? 사용에 대한 모범 사례 배쉬에서?.

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

그런 다음 원할 경우 다양한 종료 코드에 반응하고 다양한 작업을 수행할 수도 있습니다.

관련 정보