중복 경로, .bash_profile 관련 문제
PyExifTool이 작동하도록 고군분투 하는 것에 대한 질문 을 게시 한 후 Stack Overflow에서 여기로 안내되었습니다. 그러나 문제는 다방면에 있었고 초보자이기 때문에 여기에서 도움을 요청하라는 지시를 받았습니다.
본질적으로 문제는 내가 실행하라는 지시를 받았을 때 실현되었습니다.
bash:~ $ type -all exiftool
돌아온 ...
exiftool is /usr/local/bin/exiftool
exiftool is /usr/local/bin/exiftool
... 어딘가에 중복 항목이 있음을 드러냅니다.
그 후 나는 달렸다 ...
bash:~ $ echo $PATH
돌아온 ...
/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile
... 중복을 포함하며 분명히 다음으로 끝나서는 안됩니다. .bash_profile
이제 터미널에서 다음을 사용하여 정리할 수 있습니다.
bash:~ $ PATH=$(echo $PATH | awk -v RS=: -v ORS=: '!($0 in a) {a[$0]; print}')
위의 내용은 Linux Journal 에서 가져온 '거의 작동'으로되어 있지만 '작동해야하는'코드는 도움이되지 않는 것 같습니다. '거의 기능'코드를 사용하면 다음이 제공됩니다.
/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile :
나는 완전히 초심자이지만 그것이 끝나야한다고 생각하지 않으며 :
분명히 .bash_profile
여전히 존재합니다. 그러나 중복을 제거하는 것처럼 보이지만 새 터미널 창을 열면 재설정되므로 심각한 해결 방법 일뿐입니다.
이것은 내 bash 프로필의 모습입니다.
export PATH=/usr/local/bin:$PATH~/.bash_profile # Setting PATH for Python 3.6 # The original version is saved in .bash_profile.pysave #PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
#export PATH
# Setting PATH for Python 2.7
# The original version is saved in .bash_profile.pysave
#PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}" #export PATH # FSL Setup FSLDIR=/usr/local/fsl PATH=${FSLDIR}/bin:${PATH} export FSLDIR PATH . ${FSLDIR}/etc/fslconf/fsl.sh
# Setting PATH for Python 3.8
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}"
export PATH
이것이 관련이 있는지 또는 관련이 있는지 확실하지 않지만 Hotbar에서 Python을 시작하고 실행할 때 ...
>>> print(os.environ['PATH'])
그것은 인쇄
/usr/bin:/bin:/usr/sbin:/sbin
bash 터미널에서 실행하면 IDLE3
다음이 반환됩니다.
/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile
주변 정보 및 실험 :
나는 아마도 FSL을 설치할 때 뭔가를 엉망으로 만들었고, .bash_profile
나에게 무언가를 했고, 이제 기본적인 코딩 기술을 배우고 개발하려고 노력하는 동안 유령에 빠지고 있다고 생각 합니다. 수동 오류이거나 homebrew 또는 Xcode와 관련이있을 수 있습니다.
.bash_profile
엔딩을 삭제할 수는 있지만 이미 충분한 피해를 입었으므로 문제를 해결하고 싶지 않아서 인터넷 포럼이 손 대고 싶지 않을 정도로 힘들다.
이것은 Linux Journal의 Mitch Frazier 에 따르면 작동하도록되어있는 것 입니다. 분명히 이것은 그나 기사에 대한 반성이 아니라 오히려 나의 제한된 이해에 대한 것입니다.
bash:~ $ export PATH=/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile
bash:~ $ echo -n $PATH | awk -v RS=: '!($0 in a) {a[$0]; printf("%s%s", length(a) > 1 ? ":" : "", $0)}'
이것은 반환 ...
/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profileUser's-MBP:~ username$
나는 또한 다음을 시도했습니다 ( pepa65 제안 ) ...
bash:~ $ PATH=$(n= IFS=':'; for e in $PATH; do [[ :$n == *:$e:* ]] || n+=$e:; done; echo "${n:0: -1}")
이것은 반환 ...
-bash: -1: substring expression < 0
변경 사항을 찾으려고 할 때 echo $PATH
...
빈 줄이 나타납니다.
나는 이것이 지적으로 자극적이지 않을 것임을 알고 있으므로 도움을 주셔서 감사합니다.
편집 1 :
.bash_profile
내 첫 번째 줄의 끝에서 제거하려는 순진한 시도 는 변경되지 않은 .bash_profile
출력에서 사라지지 echo $PATH
않았습니다.
답변
다음은 .bash_profile
구성에 적합하게 축소 및 수정 된 것입니다.
처음에는 ~/.bash_profile
다른 올바른 줄에 잘못 추가 된 문제가있는 줄이 있었습니다. 그러나 예상하고 진단 결과 이미 시스템 제공 기본값에 있던 디렉토리를 추가하고 있다고 예상했기 때문에 전체 줄을 제거했습니다 PATH
.
export PATH
두 번 이상 필요하지 않습니다 . 나머지 하나의 인스턴스도 안전하게 제거 할 수 있습니다. 의 의미는 하위 프로세스에서 볼 수 export
있는 환경 변수 로 만들 변수를 표시하는 것 입니다. 이 작업을 완료하면 하위 프로세스는 .NET Framework 이후에 값이 변경 되더라도 변수의 현재 값에 액세스 할 수 있습니다 export
. 아마도 시스템 전체의 쉘 구성이 이미 PATH
변수에 대해이 작업을 수행 할 것입니다 (그렇지 않으면 의도 한대로 작동하지 않을 수 있음).
주석 처리 된 전체 섹션을 제거했습니다. 물론 다시 가져와 주석 처리를 제거 할 수 있습니다.
# FSL Setup
FSLDIR=/usr/local/fsl
PATH=${FSLDIR}/bin:${PATH}
export FSLDIR PATH
. ${FSLDIR}/etc/fslconf/fsl.sh # Setting PATH for Python 3.8 # The original version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}"
이 파일은 새 셸을 시작할 때 읽혀 지지만 OS 공급 업체가 Bash를 구성한 방법에 따라 정확히 언제 달라질 수 있습니다. 이전 구성이 더 이상 현재 구성을 방해하지 않는지 확인하려면 다시 시작하는 데 로그 아웃했다가 다시 로그인해야하는지 또는 새 셸 또는 새 터미널 세션을 시작하여 깨끗한 슬레이트를 얻으십시오.
.bash_profile.pysave
유지하고 싶은 유용한 내용이 포함되어 있는지 여전히 검토 할 수 있지만, 마지막 줄 집합을 제외하고는 현재 버전과 대체로 동일 할 것으로 예상합니다.