필요한 경우 일부 환경 변수를 설정하기 위해 다음 스크립트를 작성했습니다.
#!/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}