我想$PATH
临时在变量前面添加几个目录,以便我可以设置一个临时开发环境,我不想更改其他 Fish 会话所看到的内容。
所以我想要一个setup-env.fish
脚本,将正确的路径添加到开头,$PATH
以便它们优先。
我的简单测试是
set -gx tool_dir "/home/jesse/sandbox/tools"
set PATH "$tool_dir/language/bin" $PATH
echo "Evnironment Set up"
我已确保这些目录存在。当我打开 shell 并运行该脚本时,如果我那么echo $PATH
该目录不会显示。
我知道有一种方法可以持久地添加一个目录,set -U fish_user_paths path $fish_user_paths
然后将其添加到全局$PATH
变量中。但我不想要这样。如果我想使用一些不同的工具,我不想过多地调整我的系统变量。如果我愿意的话,我宁愿先添加$PATH
并关闭 shell。我已经阅读了一些 Fish 文档和一些有关更改的 github 问题$PATH
,我收集到一些变量被 Fish 不同地处理,所以我不确定我是否在这里遗漏了其他内容。
如果我在 shell 中运行这些命令,它会起作用,但我希望我的脚本执行更多操作,并且我不想在其中输入所有内容。
我在 XUbuntu 16.04 上使用 Fish 2.7.1。
答案1
我思考您只能在当前 shell 中更改 的范围fish_user_paths
:我相信当您退出此 Fish 会话时,该变量的通用值将不受影响。
set -g fish_user_paths "$tool_dir/language/bin" $fish_user_paths
答案2
事实证明,我必须使用source
脚本而不是仅仅运行它,然后它才能按照我想要的方式工作。
答案3
另一种选择是创建鱼类功能。对于 Fish shell,-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