배쉬 : command1이 실패하면 command2를 실행하십시오.


43

나는 이런 식으로하고 싶다 :

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

어떻게해야합니까?


1
"echo success"명령 앞에 "then"키워드가 없습니다.
glenn jackman 2016 년

10
흠; 당신의 의사 코드는 당신의 제목에있는 것과 다른 질문을하는 것 같습니다 .....
mattdm

일부 쉘 스크립팅 종료 조건에 대한 유용한 리소스 pixelbeat.org/programming/shell_script_mistakes.html
Flashman

답변:


71

이들은 당신이 필요한 것을해야합니다 :

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

또는

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

3
이것은 작동하지만 ||첫 번째 echo명령 의 출력을 보지 않는 이유 가 혼란 스럽습니다 .
mlissner

1
@mlissner, if는 코드를 종료 할 것으로 예상되며, 명령이 시작된 경우 0, 오류가 발생한 경우 1입니다. 출력을 읽지 마십시오. Just try whoami && whoami && echo success || echo epic fail그리고 지금 whoami && whoareyou && echo success || echo epic fail. "첫 번째 반향 명령의 출력을 보지 않았습니다"
erm3nda

@ mlissner 나는 당신의 질문을 받았다고 생각하지만, 대답은 echo 명령이 결코 실패하지 않는다는 것입니다. 즉, 그 리턴은 0, 즉 진실입니다. 정말 중요한 조건은cmd1 && cmd2
Kazim Zaidi

22

Petr Uzel이 자리에 있지만 마술 $?로 플레이 할 수도 있습니다.

$? 는 마지막으로 실행 된 명령의 종료 코드를 보유하며, 이것을 사용하면 매우 유연하게 스크립트를 작성할 수 있습니다.

이 질문은이 주제에 약간의 영향을 미칩니다 . bash에서? .

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

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


1
저의 회사 인 PHP Experts, Inc.와 저는 내부 CI 스크립트의 핵심 부분이되어 주셔서 감사합니다. 감사합니다!
Theodore R. Smith

7

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

명령 1이 실패한 경우 실제로 명령 2를 실행하는 방법을 알아야하는 사람은 다음과 같습니다.

  • cmd1 || cmd2:이 실행 cmd1되며 실패시 실행됩니다.cmd2
  • cmd1 && cmd2:이 실행 cmd1되며 성공하면 실행됩니다.cmd2
  • cmd1 ; cmd2:이 작업이 실행 된 cmd1cmd2실패 또는 실행 성공에 관계없이 실행 cmd1됩니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.