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.shnvm

答え2

(基本的にここでterdonの答えの一部を繰り返しています)

開発者は、ファイル内にすでに存在する他のタスクが自分のタスクを上書きしたくないので、タスクをシェルの開始ファイルの~/.profile末尾に配置する必要があります。~/.bashrc

ソフトウェア開発者だからXシェルの起動ファイルに何があるのか​​わからず、彼らが提供できる最も安全なアドバイスは、そのタスクを最後に追加することです。

関連情報