쉘 손실을 방지하려면 set -e를 사용하십시오.

쉘 손실을 방지하려면 set -e를 사용하십시오.

bash 스크립트에서 set -e를 사용하고 싶지만 실행할 때마다 오류가 발생하면 쉘이 종료됩니다.

  say I have script.sh:

  #! /usr/bin/env bash
  set -e
  my_commmand
  my_other_command

my_command이 작업을 수행하는지 여부에 관계없이 쉘을 날려버리는 오류가 발생합니다.

 % ./script.sh (after chmod)

또는

 % . ./script.sh

이 문제를 해결하는 간단한 방법이 있어야 합니다.

답변1

대화형 쉘이 종료되었다는 뜻인가요?

대화형 셸에서 스크립트 세트를 가져오면( 를 사용하여 .) set -e"exit-on-error" 플래그도 대화형 셸에 설정됩니다. 이전에 이 작업을 수행한 경우 소스 스크립트( . ./script.sh)이든 일반적으로 실행되는 스크립트( ./script.sh) 이든 나중에 실행하는 모든 명령에 적용됩니다 .

해결책은 스크립트를 소싱하는 것이 아닙니다 set -e.

당신은 또한 볼 수 있습니다배쉬 FAQ 105기타 문제에 관해서 set -e.

답변2

대화형 셸에 들어가고 set -e0이 아닌 값을 반환할 수 있는 명령을 실행하려면 해당 종료 코드를 캡처해야 합니다. 떨어져 있는:

$ some_command || :

다른:

$ if ! some_command; then :; fi

답변3

로그인 쉘 내에서 호출한 set -e다음 복합 명령문에 사용되지 않는 0이 아닌 종료 코드를 반환하는 명령을 실행하면 로그인 쉘이 종료됩니다.

set -e
false

로그아웃됩니다.

set -e로그인 쉘에서 지정한 설정을 사용하는 스크립트를 실행한 적이 있는 경우 . ./script.-e

나중에 0이 아닌 종료 코드를 사용하여 명령을 실행하는 경우: bingo.

관련 정보