スクリプトでフィッシュシェルセッションの$ PATHを一時的に設定します。

スクリプトでフィッシュシェルセッションの$ PATHを一時的に設定します。

$PATH一時開発環境を設定できるように、変数の前にいくつかのディレクトリを一時的に追加したいと思います。他のフィッシュセッションで見たものは変更したくありません。

setup-env.fishだから私は正しいパスを先頭に追加して優先順位を持つスクリプトが欲しいです$PATH

私の簡単なテストは

set -gx tool_dir "/home/jesse/sandbox/tools"
set PATH "$tool_dir/language/bin" $PATH
echo "Evnironment Set up"

私はこれらのディレクトリが存在することを確認しました。シェルを開いてスクリプトを実行すると、ディレクトリecho $PATHは表示されません。

絶えずディレクトリを追加し、set -U fish_user_paths path $fish_user_pathsそれをグローバル$PATH変数に追加する方法があることを知っています。しかし、私はこれをしたくありません。他のツールを使用したい場合は、システム変数をあまり調整したくありません。必要に応じて、まず$PATHシェルを追加して閉じたいと思います。私はいくつかのFishドキュメントと変更に関するいくつかのgithubの問題を読み、$PATHいくつかの変数がFishによって異なる方法で処理されるという事実を収集しました。したがって、ここで他のものが欠けているかどうかはわかりません。

シェルでこのコマンドを実行するとうまくいきますが、スクリプトでより多くのことをしたくないので、すべての内容を入力したくありません。

XUbuntu 16.04でFish 2.7.1を使用しています。

答え1

考える範囲は現在のシェル内でのみ変更できますfish_user_paths。このフィッシュセッションを終了しても、この変数の一般的な値は影響を受けないと思います。

set -g fish_user_paths "$tool_dir/language/bin" $fish_user_paths

答え2

source私が望む方法で動作するには、スクリプトを実行する代わりにスクリプトを使用する必要がありました。

答え3

別のオプションは魚の機能を作成することです。 Fishシェルの場合、-xは子に渡される一時変数、-lは子に渡されない一時変数です。機能を切り替えたい場合。 vimを使用して、次のように関数を作成します。

funced -e vi name_of_function

function name_of_function
   set -x PATH /home/username/some_path  $PATH
end

funcsave name_of_function

代替パスを有効にするには、name_of_functionと入力します。

現在の端末の子端末以外の端末を開くと、name_of_functionを再実行しない限り、一時値は使用されません。

またはファイルを作成することもできます。

#!/usr/bin/fish
set -x PATH /home/username/some_path $PATH

そして

source ~/file_name

関連情報