중복 경로, .bash_profile 문제

중복 경로, .bash_profile 문제

이 글을 게시한 후 Stack Overflow에서 여기로 이동했습니다.하나의 질문PyExifTool을 작동시키려는 시도에 대해. 그러나 문제는 다면적인 것으로 보이며 초보자로서 여기에서 도움을 구하라는 말을 들었습니다.

본질적으로 문제는 내가 달리라는 말을 들었을 때 깨달았습니다 ...

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}')

위는 내가 얻은 스 니펫입니다.리눅스 매거진이것은 "거의 작동"해야 하지만 "작동해야 하는" 코드는 나에게 도움이 되지 않는 것 같습니다. "거의 작동하는" 코드를 사용하면 다음과 같은 결과가 나타납니다.

/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, 지금은 기본 코딩 기술을 배우고 개발하려고 할 때 막혀 있습니다. 어쩌면 이것은 수동 오류일 수도 있고, 홈브류나 Xcode와 관련된 것일 수도 있습니다.

결말을 삭제할 수도 있지만 .bash_profile, 이미 충분히 피해를 입혔기 때문에 인터넷 포럼에서 건드릴 의향이 없을 정도로 힘든 문제를 직접 해결하고 싶지는 않습니다.

이는 다음 사항에 따라야 합니다.Linux Magazine의 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$

나는 또한 다음을 시도했습니다.페파 65)...

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

답변1

이는 단순화되고 수정되었으며 .bash_profile귀하의 구성에 적합하기를 바랍니다.

~/.bash_profile원래 올바른 줄에 잘못 추가된 문제가 있는 줄이 처음에 있습니다 . 그러나 예상하고 진단 결과 시스템 제공 기본 디렉터리에 이미 있는 디렉터리가 추가된 것으로 나타났기 때문에 전체 줄을 제거했습니다 PATH.

한 번 이상 필요하지 않을 수도 있습니다 export PATH. 남은 인스턴스 하나를 안전하게 삭제할 수도 있습니다. export변수를 표시하여 다음과 같이 표시하는 것을 의미합니다 .환경하위 프로세스에 표시되는 변수입니다. 이 작업이 완료되면 값이 에 있더라도 하위 프로세스는 변수의 현재 값에 액세스할 수 있습니다 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}"

이 파일은 새 셸을 시작할 때 읽혀지지만 정확한 시기는 운영 체제 공급업체가 Bash를 구성한 방식에 따라 달라집니다. 이전 구성이 더 이상 현재 구성을 방해하지 않도록 하려면 다시 시작하기 위해 로그아웃했다가 다시 로그인해야 하는지 또는 간단히 새 셸이나 새 터미널 세션을 시작하여 다시 시작할 수 있는지 여부를 결정해야 합니다. 재시작.

.bash_profile.pysave아마도 유지하고 싶은 유용한 내용이 포함되어 있는지 확인할 수도 있습니다 . 하지만 마지막 줄 세트를 제외하면 현재 버전과 거의 동일할 것으로 예상됩니다.

관련 정보