비로그인 비대화식 bash 시작 문제

비로그인 비대화식 bash 시작 문제

bash 시작 파일을 배우고 있는데 다음 링크를 찾았습니다.

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 시작 파일에 대한 자세한 내용은 모든 시나리오에 대한 전체 설정을 참조하세요.여기.

관련 정보