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-profile
ENV
ENV
ENV=/path/to/rcfile sh
$ENV
특정 변수는 위와 같이 명령줄에서 선언 하거나 사용해야 합니다 export
. 예를 들어 $PATH
다음과 같습니다.
export "PATH=$PATH:/some/more/paths"; sh
참조하는 변수는 가져와야 하는 파일이 아니며 $BASH_ENV
호출 시 그렇게 해석되지 않습니다. 그러나 비대화형 쉘을 호출할 때 얻는 파일의 경로입니다. 예를 들어 스크립트를 사용하여 지정됩니다.bash
sh
bash
#!/bin/bash
...또는 폭발물 라인.
스크립트/셸을 호출하는 또 다른 방법은 env
유틸리티를 사용하는 것입니다. 환경에서 값을 명시적으로 제거하거나 처음부터 값을 지우는 데 가장 쉽게 사용할 수 있습니다.
env - BASH_ENV=/path/to/rcfile /usr/bin/bash /some/script/file
이는 모든 인수가 추가된 명령을 env
호출 하여 환경 변수를 지정하도록 지시 하지만 그렇지 않으면 완전히 깨끗한 환경입니다./usr/bin/bash
$BASH_ENV