SDK 표현식이 bash_profile 파일 끝에 있어야 하는 이유는 무엇입니까? "잘못된" 위치와 정상적인 행동을 고려하는 것이 정말로 필요합니까?

SDK 표현식이 bash_profile 파일 끝에 있어야 하는 이유는 무엇입니까? "잘못된" 위치와 정상적인 행동을 고려하는 것이 정말로 필요합니까?

몇 년 동안 Linux를 사용한 후 최근에는 macOS를 사용하기 시작했습니다(OSX는 동일한 이름의 이전 이름입니다).

macOS Monterey에서는 .zshrc이것이 기본 설정입니다. 이 내 꺼야 .zsh:

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

어제 나는 bash이것이 나에게 익숙한 쉘이기 때문에 그것을 변경하기로 결정했습니다. 따라서 기본 설정을 가리키고 클릭하여 이 작업을 수행합니다.

이 내 꺼야 .bash_profile:

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

위에서 볼 수 있듯이 프로그램을 실행하려면 SDKMAN의 표현식이 파일 끝에 있어야 한다는 주석이 있습니다.

웃긴데 난 그 이후까지 이걸 눈치채지 못했어대개sdk터미널에서 사용하세요.

이것이 왜 필요한가요? 프로그램이 이미 예상대로 작동한다는 점을 고려하면 정말 필요한가요 bash_profile?

감사해요

답변1

확실하게 알기 위해서는 해당 코드를 작성한 개발자에게 문의해야 할 것입니다. 그러나 제 생각에는 그것이 절대적으로 마지막일 필요는 없으며 ~/.profile단지 다른 변수 정의 및 설정이 발생한 이후여야 한다는 것입니다.

이 명령은 source "$HOME/.sdkman/bin/sdkman-init.sh"스크립트를 읽고 sdkman-init.sh현재 셸에서 변수 정의를 포함하여 스크립트에 포함된 모든 명령을 실행합니다. 따라서 스크립트에서 무언가를 정의해야 한다고 가정하는 경우 해당 항목이 정의되기 전에 가져오면 실패합니다.

예를 들어, 스크립트에는 사용자의 디렉토리에 있어야 할 디렉토리가 필요할 수 있으므로 PATH설정하기 전에 해당 디렉토리를 얻으면 PATH작동하지 않습니다. 이것이 개발자가 당신이 그것을 소유하기를 원하는 이유일 가능성이 높습니다. 이제 귀하의 예에서 명령 다음의 유일한 것은 sdkman이 어떤 식으로든 nvm에 의존하지 않으면 문제가 되지 않는다는 것입니다 sdkman-init.sh.nvm

답변2

(기본적으로 여기서 terdon의 답변 일부를 반복하고 있습니다)

개발자는 파일에 이미 있는 다른 작업이 자신의 작업을 덮어쓰는 것을 원하지 않기 때문에 작업을 ~/.profile또는 등의 셸 시작 파일 끝에 배치해야 합니다 .~/.bashrc

소프트웨어 개발자이기 때문에엑스쉘 시작 파일에 다른 작업이 무엇인지 알지 못한 채 그들이 제공할 수 있는 가장 안전한 조언은 해당 작업을 끝에 추가하는 것입니다.

관련 정보