비대화형 쉘에 환경 변수를 전달하는 방법(예제 포함)은 무엇입니까?

비대화형 쉘에 환경 변수를 전달하는 방법(예제 포함)은 무엇입니까?

sh 스크립트에서 또 다른 sh 스크립트는 su -l <user> -c /path/to/script.sh. 내가 이해하는 바로는 script.sh비대화형 쉘에서 실행됩니다. 공식 문서에서는 이러한 비대화형 쉘에서 변수를 설정하는 방법, 즉 변수를 BASH_ENV[http://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html]. 이는 분명히 초보자에게는 부적절한 설명이며 (실제) 예제도 없습니다($SEARCH_ENGINE에서도 찾을 수 없음).

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

많은 의미가 있을 수 있습니다[1]. 비대화형 쉘에 전달된 환경 변수의 예를 들어줄 수 있는 사람이 있습니까?

확실히 하자면, 로그인한 상태와 로그인하지 않은 상태, 대화형과 비대화형의 차이는 분명합니다(https://superuser.com/questions/636219/where-should-i-export-an-environment-variable-so-that-all-combinations-of-bash-d또는 관심 있는 사람이 있으면 참조 링크를 참조하세요.


[1]나는 노력했다

  • BASH_ENV="\\$PATH=$PATH\\n\\$JAVA_HOME=$JAVA_HOME" su -l artifactory -c echo $JAVA_HOME
  • BASH_ENV="\$PATH=$PATH\n\$JAVA_HOME=$JAVA_HOME" su -l artifactory -c echo $JAVA_HOME
  • su -l artifactory -c echo $JAVA_HOME

답변1

스크립트 인 경우 sh(예를 들어 명시적으로 참조되어 있지만 호출하는 것과 동일 #!/bin/sh할 수 있음 ) 환경 변수를 사용하여 파일을 지정할 수 있습니다 .bash--posix --no-rc --no-profileENVENV

ENV=/path/to/rcfile sh

$ENV특정 변수는 위와 같이 명령줄에서 선언 하거나 사용해야 합니다 export. 예를 들어 $PATH다음과 같습니다.

export "PATH=$PATH:/some/more/paths"; sh

참조하는 변수는 가져와야 하는 파일이 아니며 $BASH_ENV호출 시 그렇게 해석되지 않습니다. 그러나 비대화형 쉘을 호출할 때 얻는 파일의 경로입니다. 예를 들어 스크립트를 사용하여 지정됩니다.bashshbash

#!/bin/bash

...또는 폭발물 라인.

스크립트/셸을 호출하는 또 다른 방법은 env유틸리티를 사용하는 것입니다. 환경에서 값을 명시적으로 제거하거나 처음부터 값을 지우는 데 가장 쉽게 사용할 수 있습니다.

env - BASH_ENV=/path/to/rcfile /usr/bin/bash /some/script/file

이는 모든 인수가 추가된 명령을 env호출 하여 환경 변수를 지정하도록 지시 하지만 그렇지 않으면 완전히 깨끗한 환경입니다./usr/bin/bash$BASH_ENV

관련 정보