bash 시작 파일을 배우고 있는데 다음 링크를 찾았습니다.
그런 다음 링크 그래프의 마지막 분기에서 bash가 로그인이 아닌 비대화형인 경우 환경 변수 BASH_ENV로 env 변수를 가져와야 한다는 것을 발견했습니다. 테스트 파일을 만들고 BASH_ENV="/home/myusername을 썼습니다. /.베어.sh"
.bare.sh의 내용은 다음과 같습니다.
var="the bare environment branch should be reached"
var를 인쇄하는 스크립트를 시작했습니다.
echo $var
그러나 스크립트를 시작한 후에는 출력이 기록되지 않습니다.
나는 그것이 "베어 환경 지점에 도달해야 한다"라고 인쇄할 것으로 예상했습니다.
여기서 무엇이 잘못되었을 수 있습니까?
답변1
비대화형, 비로그인 bash
쉘이 다음을 찾는 경우BASH_ENV
그 환경에서, 파일을 가져옵니다. 내보내지 않으면 BASH_ENV
쉘 환경에서 찾을 수 없습니다.
export BASH_ENV
이는 호출 셸에 있거나 다음을 사용해야 함을 의미합니다.
BASH_ENV=$BASH_ENV ./myscript.sh
스크립트를 시작할 때.
매뉴얼의 관련 구절 bash
:
예를 들어 bash가 비대화식으로 시작될 때 쉘 스크립트를 실행하려면
BASH_ENV
환경에서 변수를 찾고 해당 값이 환경에 있으면 확장하고 확장된 값을 파일로 사용하여 읽고 실행합니다. . Bash는 다음 명령이 실행된 것처럼 동작합니다.if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
그러나 변수 값은
PATH
파일 이름을 검색하는 데 사용되지 않습니다.
즉, 간단히 말해서 BASH_ENV
대화형 셸에서 설정하는 것만으로는 충분하지 않고 셸 스크립트 환경에서도 표시되어야 합니다.
답변2
비대화형 쉘 호출의 또 다른 경우는 원격 쉘 데몬(일반적으로 rshd
)에 의한 호출 또는 보안 쉘 데몬에 의한 호출 입니다 sshd
. 앞서 인용한 내용Bash 시작 파일 매뉴얼:
Bash가 이러한 방식으로 비대화형으로 실행되고 있다고 판단하면 ~/.bashrc에서 명령을 읽고 실행합니다(파일이 존재하고 읽을 수 있는 경우).
이 경우 ~/.bashrc
다음만 있으면 충분합니다.
if [ -z "$POSIXLY_CORRECT" ]; then
[ -z "$BASH_ENV" ] && export BASH_ENV="$HOME/.bash_env"
source "$BASH_ENV"
fi
Bash 시작 파일에 대한 자세한 내용은 모든 시나리오에 대한 전체 설정을 참조하세요.여기.