JAVA_HOME
grid
내 목표는 hadoop의 전통적인 사용자 이름인 이라는 사용자에 대한 환경 변수를 설정하는 것입니다 .내 컴퓨터는 VMware Workstation, 64비트 CentOS7에 배포된 가상 컴퓨터입니다.
내가 한 일: 사용자별 환경 변수를 변경해야 하는 파일을 편집했습니다. 즉,
~/.bash_profile
아래는 내 코드입니다.export JAVA_HOME=/home/grid/jdk export HADOOP_HOME=/home/grid/hadoop PATH=$PATH:$HADOOP_HOME:$JAVA_HOME export PATH
매우 흥미롭게도 사용자로 로그인
grid
하고 실행 하면echo $HADOOP_HOME
가 표시되지만/home/grid/hadoop
실행하면 응답이 없습니다echo $JAVA_HOME
. 실제로는 아무것도 없고 빈 문자열이나 null과 같은 내용이 표시됩니다. 나는 실행cd $JAVA_HOME
하고 홈 디렉토리로 이동합니다.JDK 폴더를 변경해 보았지만 성공하지 못했습니다. 다른 컴퓨터에서 동일한 코드를 시도했는데 작동했습니다. 코드를 입력
/etc/profile
하고 루트로 로그인했는데 같은 일이 일어났습니다. 문제는 없지만echo $HADOOP_HOME
응답이 없습니다echo $JAVA_HOME
.
답변1
첫째, 주목할 만한 것이 있습니다 $PATH
. 디렉토리 JAVA_HOME
로 설정했지만 의 경우 로 설정해야 합니다 .jdk
PATH
$JAVA_HOME/bin
둘째, 이러한 변수를 비대화형 스크립트에서 사용할 수 있어야 하는 경우 대화형 로그인에서만 읽을 수 있으므로 ~/.bashrc
해당 변수를 넣어야 할 수도 있습니다.~/.bash_profile
실제로 (로그인 셸) 구성 파일을 읽는 실제 순서는 다음과 같습니다.
/etc/profile
그 다음에:
~/.bash_profile
(CentOS에서는-f ~/.bashrc
, source~/.bashrc
)~/.bash_login
~/.profile
(우분투에서는-n $BASH_VERSION
, source~/.bashrc
)
편집: 이 파일 중 하나가 발견되면 소스가 명확하지 않으면 다른 파일은 처리되지 않습니다.
비로그인 쉘(기본적으로)은 ~/.bashrc
.
따라서 수행 방법에 따라 bash
이러한 줄이 추가된 구성 파일을 읽지 못할 수도 있습니다. 테스트할 때마다 sudo -u grid bash
, 또는 su grid
, 또는 을 실행 su - grid
하거나 새 SSH 세션을 시작하고 있습니까 ? 이러한 옵션 중 일부는 대화형 로그인 bash 쉘을 트리거하지 않을 수 있습니다.
따라서 위에 나열된 각 파일을 확인하고 그 중 변수를 설정 해제하거나 재설정하는 파일이 있는지 확인하세요 JAVA_HOME
. 그런 다음 ~/.profile
로그인 셸이 가져오는 마지막 파일인 의 끝에 다음 줄을 추가해 보세요 .
디버깅 목적으로 구성 파일에 메시지를 추가하여 올바르게 설정되었는지 확인할 수 있습니다.
~/.profile
:
export JAVA_HOME=/home/grid/jdk
echo "DEBUG: .profile: JAVA_HOME is [$JAVA_HOME]"
export HADOOP_HOME=/home/grid/hadoop
echo "DEBUG: .profile: HADOOP_HOME is [$HADOOP_HOME]"
PATH=$HADOOP_HOME:$JAVA_HOME/bin:$PATH
echo "DEBUG: .profile: PATH is [$PATH]"
export PATH
이렇게 하면 대화형 로그인 셸에 로그인하면 3줄의 출력이 나오며, 괄호 사이의 값을 보면 해당 값이 처음에 설정되었는지 쉽게 확인할 수 있습니다. 네가 그걸 본다면JAVA_HOME
예소스를 가져올 때 설정되지만 ~/.profile
쉘이 대화형이 될 때는 설정되지 않습니다. 그러면 값이 변경된 위치를 확인하기 위해 로그인 프로세스를 계속 추적해야 한다는 것을 알 수 있습니다.