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
. source
ed이면 추가 행이 실행되지 않습니다. (하지만 조용히. 이 경우 오류 메시지에 대한 해결책이 있습니까?)