現在、 fish Shell をいじっていますが、PATH
変数がどのように設定されているかを頭で包むのに苦労しています。価値があるものとして、 oh-my-fish も使用しています。
現在のパスをエコーすると、次の結果が得られます。
➜ fish echo $PATH
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/X11/bin /usr/texbin /Users/myname/.opam/system/bin
~/.config/fish/config.fish
を見ると、次の行が表示されます
set PATH /usr/local/bin $PATH /Users/myname/.opam/system/bin
私の質問は(そして、この言い回しはおそらく主題に関する私の知識の欠如を反映するでしょう):config.fish
が処理される前に、PATH
変数はどこに設定されていますか?すなわち:/usr/local/bin
と/Users/myname/.opam/system/bin
の間のすべてのパスはどこから来たのですか?
公式の魚チュートリアル で述べたように、$fish_user_paths
ユニバーサル変数を変更できます。
コマンドラインから次を1回実行します。
set -U fish_user_paths /usr/local/bin $fish_user_paths
これはパスに/usr/local/bin
を永続的に追加し、現在のセッションと将来のすべてのインスタンスにも影響します。
この行をconfig.fish
ファイルに追加しないでください。これは、$fish_user_paths
が各シェルインスタンスで大きくなるためです。
すべてのシェルと同様に、fishは起動された環境からPATHを継承します。ログインシェルの設定方法はオペレーティングシステムによって異なります。たとえば、Linuxでは、/etc/login.defs
はすべてのログインシェルの初期PATHセットを制御します。これがOS Xでどのように設定されているかわかりません。
次に、bash
やcsh
のように、シェルの初期化ファイルによってパスが変更される場合があります。 OS Xのフィッシュの場合、share/fish/config.fish
にコードがあり、標準のOS Xパス構成ファイル/etc/paths
および/etc/paths.d/*
からパスをロードします。 Solarisに便利なパスを設定する代替コードがあります。
また、ユニバーサル変数$fish_user_paths
からパスを取得するコードもあります。これは PATHに何かを追加し、すべてのシェルに反映させる正しい方法 です。