작동하지 않는 환경 변수를 설정하는 BASH 스크립트 환경 변수를 설정하기 위해 다음 스크립트를 작성했습니다. #!/bin/sh export

필요한 경우 일부 환경 변수를 설정하기 위해 다음 스크립트를 작성했습니다.

#!/bin/sh
export BASE=/home/develop/trees
echo $BASE
export PATH=$PATH:$BASE
echo $PATH

명령과 결과 아래에서 터미널에서 볼 수 있습니다. 스크립트는 실행되지만 변수는 마지막에 설정되지 않습니다.

~$: ./script.sh
/home/develop/trees
/bin:......:/home/develop/trees
~$: echo $BASE

~$: 

뭐가 문제 야? 미리 감사드립니다. 미르코



답변

export변수 할당을 export명령이 실행 된 쉘의 하위 프로세스로 내 보냅니다 . 명령 줄 환경은 스크립트 셸 의 부모 이므로 변수 할당이 표시되지 않습니다.

당신은 사용할 수 있습니다 .(또는 source, 예를 스크립트가 현재 쉘 환경에서 명령을 실행하고 당신이 원하는 것을 달성하기 위해) bash는 명령을

source ./script.sh
echo "$BASE"

생산할 것이다

/home/develop/trees

source종종 스크립트에서 볼 명령, 대한 bash는 동의어입니다 .POSIX 표준의 일부이며, (그래서 .예를 들어, 대시에서 사용할 수 있지만 source하지 않습니다).

. ./script.sh     # identical to "source ./script.sh"

( . script.sh그리고 source script.sh첫번째를 찾습니다 script.sh에서 PATH, 그래서 경로를 지정하는 안전합니다 script.sh.)


답변

스크립트를 실행하면 서브 쉘에서 실행됩니다. 변수는 해당 서브 쉘의 컨텍스트 내에서만 유효합니다. 변수를 설정 .bashrc하거나 변수와 서브 쉘을.profile 읽으십시오 . 문이 아닌 예에서와 같이 최대 hierachy (현재 쉘 모든 그것의 서브 쉘)을 아래로 작동합니다.export

또는 (스크립트가 현재 쉘의 환경에 영향을 미치도록하려면) 다음과 같이 실행하십시오.

. ./script.sh

그러면 현재 쉘에서 실행되지만 변수를 계층 구조로 전달하지 않습니다.


답변

종종 번거롭지 않은 환경 변수를 설정하고 싶습니다.

이 편의를 구현하기 위해 .bashrc에 추가 한 내용은 다음과 같습니다.

defect() {
    if [ $1 ] && [ -z $2 ]
    then
        eval 'export DEFECT=$1'
        return 0
    else
        echo 'Usage: defect {number}'
        return 1
    fi
}

답변

이런 식으로 시도해 볼 수 있습니다

CURRENT_DIR=`pwd`
echo "SOME_PATH is pointing to ${CURRENT_DIR}"
#Export SOME_PATH for current working directory
export SOME_PATH=${CURRENT_DIR}