bash 스크립트에서 환경 변수에 액세스 할 수 없습니다


22

나는 이상한 문제에 부딪쳤다. env 변수를 넣고 다음 .bashrc과 같이 작동합니다.

echo $HADOOP_HOME
/home/me/dist/hadoop

그러나 bash 스크립트를 실행할 때는 env 변수에 액세스 할 수 없습니다. /tmp/sample.sh아래 내용으로 작성한다고 가정 해보 십시오.

#! /bin/bash
echo $HADOOP_HOME

위의 스크립트를 실행하면 빈 줄이 나타납니다.

/tmp/sample.sh
   

1
당신의 관련 부분을 보여줄 수 있습니까 .bashrc? 내 생각 엔 exporting : export HADOOP_HOME=/home/me/dist/hadoop, 당신이 /tmpsample.sh` 를 실행할 때 ( bash새로운 환경 으로 새로운 것을 생성한다 ) HADOOP_HOME은 새로운 환경에 있지 않다.
John N

답변:


29

HADOOP_HOME변수가 내보내지지 않았기 때문입니다 .

$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"


$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop

$ foo.sh
HADOOP_HOME: 

$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop

쉘 스크립트를 실행할 때, 해당 스크립트는 현재 스크립트 #!/bin/bash의 자식 쉘인 자체 bash 인스턴스 (그것이하는 일)에서 실행됩니다 . 변수는 익스포트 된 경우에만 기본적으로 하위 쉘로 전달되지 않습니다. 각 bash 세션은 독립적 인 것으로 생각하십시오 (대부분은 그렇습니다). 일반적으로 한 환경에서 다른 환경을 오염시키기 위해 정의 된 변수를 원하지 않습니다. 필요한 경우을 사용하십시오 export.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.