$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