Bash 스크립트는 상위 환경을 상속하지 않습니다.

Bash 스크립트는 상위 환경을 상속하지 않습니다.

이 질문의 또 다른 제목은 다음과 같습니다.

"상위 쉘에서 인식된 명령을 하위 쉘에서 찾을 수 없습니다"

나는 이것을 부모 쉘에 가지고 있습니다

source ~/.quicklock/ql.sh

이 명령은 현재 쉘에서 인식됩니다.

ql_acquire_lock

그런 다음 다음과 같은 스크립트를 실행합니다.

./script/tsc.sh

이 스크립트에는 다음이 있습니다.

#!/usr/bin/env bash
set -e;
ql_acquire_lock

unset 등이 명시적으로 호출되지 않는 한 자식 쉘/프로세스가 부모 환경을 상속받을 것이라고 생각했기 때문에 쉘이 어떻게 작동하는지 정말 혼란스럽습니다.

내가 얻는 오류는 다음과 같습니다.

./scripts/tsc.sh: line 3: ql_acquire_lock: command not found

답변1

하위 쉘은 상위 쉘의 환경을 상속받습니다.

환경에는 상위 셸에서 내보낸 콘텐츠가 포함됩니다.

쉘 기능을 내보내지 않으면 하위 프로세스 환경에 존재하지 않습니다.

bashbash쉘 함수는 다음을 사용하여 서브쉘에서 사용하기 위해 내보낼 수 있습니다.

export -f functionname

부모 쉘에서.

관련 정보