환경 변수 설정이 불완전한 이유는 무엇입니까?

환경 변수 설정이 불완전한 이유는 무엇입니까?
  1. JAVA_HOMEgrid내 목표는 hadoop의 전통적인 사용자 이름인 이라는 사용자에 대한 환경 변수를 설정하는 것입니다 .

  2. 내 컴퓨터는 VMware Workstation, 64비트 CentOS7에 배포된 가상 컴퓨터입니다.

  3. 내가 한 일: 사용자별 환경 변수를 변경해야 하는 파일을 편집했습니다. 즉, ~/.bash_profile아래는 내 코드입니다.

    export JAVA_HOME=/home/grid/jdk
    export HADOOP_HOME=/home/grid/hadoop
    PATH=$PATH:$HADOOP_HOME:$JAVA_HOME
    export PATH
    
  4. 매우 흥미롭게도 사용자로 로그인 grid하고 실행 하면 echo $HADOOP_HOME가 표시되지만 /home/grid/hadoop실행하면 응답이 없습니다 echo $JAVA_HOME. 실제로는 아무것도 없고 빈 문자열이나 null과 같은 내용이 표시됩니다. 나는 실행 cd $JAVA_HOME하고 홈 디렉토리로 이동합니다.

  5. JDK 폴더를 변경해 보았지만 성공하지 못했습니다. 다른 컴퓨터에서 동일한 코드를 시도했는데 작동했습니다. 코드를 입력 /etc/profile하고 루트로 로그인했는데 같은 일이 일어났습니다. 문제는 없지만 echo $HADOOP_HOME응답이 없습니다 echo $JAVA_HOME.

답변1

첫째, 주목할 만한 것이 있습니다 $PATH. 디렉토리 JAVA_HOME로 설정했지만 의 경우 로 설정해야 합니다 .jdkPATH$JAVA_HOME/bin

둘째, 이러한 변수를 비대화형 스크립트에서 사용할 수 있어야 하는 경우 대화형 로그인에서만 읽을 수 있으므로 ~/.bashrc해당 변수를 넣어야 할 수도 있습니다.~/.bash_profile

실제로 (로그인 셸) 구성 파일을 읽는 실제 순서는 다음과 같습니다.

  1. /etc/profile

그 다음에:

  1. ~/.bash_profile(CentOS에서는 -f ~/.bashrc, source ~/.bashrc)
  2. ~/.bash_login
  3. ~/.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쉘이 대화형이 될 때는 설정되지 않습니다. 그러면 값이 변경된 위치를 확인하기 위해 로그인 프로세스를 계속 추적해야 한다는 것을 알 수 있습니다.

관련 정보