
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
이 키워드
after
는 PATH
.
그러면 중복이 발생하지 않습니다. 그러나 왜 당신이 그것을 갖고 있는지 모르겠습니다.
답변2
이는 구성의 항목이 /etc/profile
여러 번 로드되기 때문에 발생합니다. 찾아서 고쳐야 합니다.
이 파일은 /etc/profile
로그인 쉘에서 읽습니다. 또한 많은 플랫폼에서 그래픽 세션에 로그인할 때도 읽혀집니다(그러나 이는 디스플레이 관리자, 세션 관리자 및 배포판의 설정 방법에 따라 다릅니다).
/etc/profile
한 가지 가능한 문제는 다른 위치(예: )에서 데이터를 요청하고 있다는 것입니다 ~/.bashrc
. 이 경우 제거하십시오. 실행하여 grep -s profile ~/.*
잠재적인 범인을 확인하십시오. su
read 실행 이후 /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