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