내 터미널 창의 일부에는 PATH
변수에 중복 항목이 있습니다. 이 같은:
PATH=/a/b:/c/d:/a/b:/c/d:/e/f:/a/b
나는 내 스크립트 중 일부에서 범인이 이와 같은 줄이라고 생각합니다.
PATH=/a/b:$PATH
이것을 소싱 한 후 다시 PATH
매우 길어집니다. 이것은 질문입니다 :
bash
정리 PATH
및 유사한 env 변수에 대한 명령이 있습니까? bash
유틸리티를 실행할 수없고 호출 쉘의 환경이 변경 될 것으로 예상하기 때문에 스크립트 여야합니다 .
위의 예에서 정리 된 내용 PATH
은 다음과 같아야합니다.
PATH=/a/b:/c/d:/e/f
답변
나중에 복제본을 제거하는 것보다 복제본을 생성하지 않는 것이 좋습니다. .bashrc
개인 bin/
디렉토리 를 추가하는 데 사용하는 기술을 사용하면 쉽게 피할 수 있습니다 .
[ "${PATH#*$HOME/bin:}" == "$PATH" ] && export PATH="$HOME/bin:$PATH"
업데이트 할 때이 작업을 수행 .bashrc
했으며 셸을 다시 시작하지 않고 다시 실행하려고했습니다.
끝에 디렉토리를 추가 $PATH
하려면 선행 콜론을 사용해야합니다.
[ "${PATH#*:$HOME/bin}" == "$PATH" ] && export PATH="$PATH:$HOME/bin"
매개 변수 확장을 사용하여 PATH
중복 을 단계별로 제거하고 제거 할 수 있지만 약간 복잡하므로 유지해야 할 위치를 결정해야합니다. 라인을 따라 뭔가 :-
OLDPATH="$PATH"; NEWPATH=""; colon=""
while [ "${OLDPATH#*:}" != "$OLDPATH" ]
do entry="${OLDPATH%%:*}"; search=":${OLDPATH#*:}:"
[ "${search#*:$entry:}" == "$search" ] && NEWPATH="$NEWPATH$colon$entry" && colon=:
OLDPATH="${OLDPATH#*:}"
done
NEWPATH="$NEWPATH:$OLDPATH"
export PATH="$NEWPATH"
이것을 즉시 작성하고 지금 테스트 한 후에, 나는 대부분의 오류를 제거했을 것입니다. 그리고 그것은 당신이해야 할 일에 대한 적절한 가이드가되어야합니다. 복제본 의 마지막 항목은 그대로 둡니다 . 처음에 복제본을 피하기 위해 스크립트를 사용한 경우 복제본이있는 곳입니다. 스크립트에서는 물론 .
/ source
명령 으로 호출해야합니다 .
답변
Microsoft technet은 파워 쉘 스크립트를 사용하여이 문제를 해결합니다 . 이 스크립트는 PATH
변수 에서 중복 항목을 식별하고 제거 합니다.
그것은 말한다 :
때때로 소프트웨어를 반복 설치하면 PATH 환경 변수에 중복 항목이 추가 될 수 있습니다. 환경 변수에는이 변수의 크기에 하드 코딩 된 제한이 있으므로 일정 기간 동안 제한 될 수 있습니다. 이 스크립트는 PATH 환경 변수를 확인하고 중복 경로 항목을 제거합니다.