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