이 질문의 또 다른 제목은 다음과 같습니다.
"상위 쉘에서 인식된 명령을 하위 쉘에서 찾을 수 없습니다"
나는 이것을 부모 쉘에 가지고 있습니다
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
하위 쉘은 상위 쉘의 환경을 상속받습니다.
환경에는 상위 셸에서 내보낸 콘텐츠가 포함됩니다.
쉘 기능을 내보내지 않으면 하위 프로세스 환경에 존재하지 않습니다.
bash
bash
쉘 함수는 다음을 사용하여 서브쉘에서 사용하기 위해 내보낼 수 있습니다.
export -f functionname
부모 쉘에서.