web-dev-qa-db-ja.com

フィッシュシェルを使用したPATHの変更

現在、 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の間のすべてのパスはどこから来たのですか?

35

公式の魚チュートリアル で述べたように、$fish_user_pathsユニバーサル変数を変更できます。

コマンドラインから次を1回実行します。

set -U fish_user_paths /usr/local/bin $fish_user_paths

これはパスに/usr/local/binを永続的に追加し、現在のセッションと将来のすべてのインスタンスにも影響します。

この行をconfig.fishファイルに追加しないでください。これは、$fish_user_pathsが各シェルインスタンスで大きくなるためです。

71
Kasper

すべてのシェルと同様に、fishは起動された環境からPATHを継承します。ログインシェルの設定方法はオペレーティングシステムによって異なります。たとえば、Linuxでは、/etc/login.defsはすべてのログインシェルの初期PATHセットを制御します。これがOS Xでどのように設定されているかわかりません。

次に、bashcshのように、シェルの初期化ファイルによってパスが変更される場合があります。 OS Xのフィッシュの場合、share/fish/config.fishにコードがあり、標準のOS Xパス構成ファイル/etc/pathsおよび/etc/paths.d/*からパスをロードします。 Solarisに便利なパスを設定する代替コードがあります。

また、ユニバーサル変数$fish_user_pathsからパスを取得するコードもあります。これは PATHに何かを追加し、すべてのシェルに反映させる正しい方法 です。

8
Zanchey