Bash 스크립트가 스크립트 자체에 들어가는 것을 방지

Bash 스크립트가 스크립트 자체에 들어가는 것을 방지

Bash 스크립트 상단에는 다음과 같은 내용이 있습니다.

if [[ "$npm_registry_override" != "yes" ]]; then
  echo "refusing to source npm.sh script because env is not set."
  exit 0;
fi

문제는 환경 변수를 얻었을 때 환경 변수가 설정되지 않았을 때 터미널 창이 닫힌다는 것입니다.

내가 이렇게 하면:

 if [[ "$npm_registry_override" != "yes" ]]; then
      echo "refusing to source npm.sh script because env is not set."
      return 0;
 fi

bash 함수 내에서가 아니면 반환을 할 수 없다는 오류/경고가 나타납니다.

그래서 당신은 무엇을 할 예정입니까? 내가 생각할 수 있는 유일한 것은 전체 스크립트를 if 문으로 래핑하는 것입니다.

답변1

이것은 내가 본 행동이 아닙니다 bash. 내 버전(4.4.12)에도 문서화되어 있지 않습니다.

$ cat <<'x' >x.sh
echo "This is x.sh"
return 0
x
$ source x.sh
This is x.sh
$

매뉴얼 페이지에서는 return동사에 대해 설명합니다.

return [n]- [...] return함수 외부에서 사용 되지만 . ( source) 명령으로 스크립트를 실행하는 동안 쉘이 스크립트 실행을 중지하고 n아래와 같이 스크립트 내에서 실행된 마지막 명령의 종료 상태를 반환합니다. .

답변2

@roaima의 답변을 바탕으로 스크립트 초기에 이 줄을 추가하세요.

return 0  2>/dev/null || :
  • 이후에도 여전히 작동합니다.set -e
  • 사용하지 않을 때에는 오류 메시지가 표시되지 않습니다 source.
  • sourceed이면 추가 행이 실행되지 않습니다. (하지만 조용히. 이 경우 오류 메시지에 대한 해결책이 있습니까?)

관련 정보