내보내기 PATH CentOS를 사용하는 이상한 동작

내보내기 PATH CentOS를 사용하는 이상한 동작

PATH다음 위치에 있는 두 개의 다른 스크립트에서 변수를 수정하려고 합니다 ./etc/profile.d/

  • /etc/profile.d/php.sh

    #!/bin/sh
    PATH=$PATH:/usr/local/php/bin
    export PATH
    
  • /etc/profile.d/mysql.sh

    #!/bin/sh
    PATH=$PATH:/usr/local/mysql/bin
    export PATH
    

CentOS를 다시 시작하고 PATH변수(편집됨)를 확인했는데 $PATH가 두 번 수정되었습니다!

[]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:
/usr/local/mysql/bin:/usr/local/php/bin:/home/IntUser/bin:/usr/local/mysql/bin:
/usr/local/php/bin
[]$ 

루트 모드에서:

[]$ su
Password: 
[]# 

$PATH가 3번 수정되었습니다!

[]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:
/usr/local/mysql/bin:/usr/local/php/bin:/home/IntUser/bin:/usr/local/mysql/bin:
/usr/local/php/bin:/usr/local//mysql/bin:/usr/local/php/bin
[]# 

한 번만 할당하면 어떨까요?

답변1

문제를 해결하는 방법은 다음과 같습니다. /etc/profile.d/php.sh파일 내용을 다음으로 바꾸세요.

pathmunge /usr/local/php/bin after

파일도 마찬가지입니다 /etc/profile.d/mysql.sh.

pathmunge /usr/local/mysql/bin after

설명은 /etc/profile.d/*.sh의 파일이원천/etc/profile(bash 쉘에 로그인하여 얻은 자체) .

이러한 파일은 소스로 제공되므로 /etc/profile파일의 모든 변수와 함수를 사용할 수 있습니다. 이것은 아직 존재하지 않는 pathmunge디렉토리에 새 디렉토리를 추가하는 것이 유일한 목적인 (내 Fedora 20의) 기능입니다 . PATH이 키워드 afterPATH.

그러면 중복이 발생하지 않습니다. 그러나 왜 당신이 그것을 갖고 있는지 모르겠습니다.

답변2

이는 구성의 항목이 /etc/profile여러 번 로드되기 때문에 발생합니다. 찾아서 고쳐야 합니다.

이 파일은 /etc/profile로그인 쉘에서 읽습니다. 또한 많은 플랫폼에서 그래픽 세션에 로그인할 때도 읽혀집니다(그러나 이는 디스플레이 관리자, 세션 관리자 및 배포판의 설정 방법에 따라 다릅니다).

/etc/profile한 가지 가능한 문제는 다른 위치(예: )에서 데이터를 요청하고 있다는 것입니다 ~/.bashrc. 이 경우 제거하십시오. 실행하여 grep -s profile ~/.*잠재적인 범인을 확인하십시오. suread 실행 이후 /etc/profile문제의 인스턴스가 하나 이상 있어야 하며 관련이 있을 수 있습니다 .bashrc.

또 다른 가능한 문제는 GUI 세션에서 터미널을 여는 동안 로그인 셸을 실행하는 경우입니다. 해결책은 로그인 셸을 실행하는 것이 아닙니다. 이미 GUI 세션에 로그인되어 있고 터미널은 일반 응용 프로그램입니다.

/home/IntUser/bin이전에 한 번 나타나고 이후에 다른 디렉토리 가 있으므로 /etc/profile./home/IntUser/bin

또는 구성을 수정하지 않으려면 디렉터리가 아직 없는 경우에만 PATH에 디렉터리를 추가하면 됩니다.

case :$PATH: in
  *:/usr/local/php/bin:*) :;;
  *) PATH=$PATH:/usr/local/php/bin;;
esac

관련 정보