我在 Debian 中使用 fish 作为我的 shell,最近(升级之后)每当我尝试使用命令完成时,我都会遇到:
set: No such file or directory
set: Could not add component /usr/lib/x86_64-linux-gnu/libfm to PATH.
set: No such file or directory
运行这个:
echo $PATH
给我这个:
/usr/lib/x86_64-linux-gnu/libfm /usr/local/bin /usr/bin /bin /usr/local/games /usr/games
在我的系统中没有/usr/lib/x86_64-linux-gnu/libfm
,所以我理解为什么鱼会抱怨,但我找不到如何从我的$PATH
变量中删除这条路径。
有人知道我该怎么做吗?
答案1
设置 $PATH 变量的“fish”方式实际上是使用set --universal fish_user_paths $fish_user_paths /new/path/here
。然后,当新会话开始时,$fish_user_paths 实际上被添加到 $PATH 变量的前面。$PATH文档但目前还没有告诉您如何删除它。
在 fish 中,每个变量实际上都是一个列表(数组),您可以使用索引/索引直接方便地访问每个项目。echo $fish_user_paths
将打印出列表中每个项目的空格分隔版本,使用翻译函数将空格变为换行符echo $fish_user_paths | tr " " "\n"
,然后使用数字行函数在其上添加行号echo $fish_user_paths | tr " " "\n" | nl
。然后用删除它set --erase --universal fish_user_paths[5]
。您必须使用--universal
,否则它将无法在任何新会话中工作。
太长不看;
echo $fish_user_paths | tr " " "\n" | nl
// 获取要删除的编号,例如第 5 个set --erase --universal fish_user_paths[5]
// 彻底删除第五条路径,以便它在新会话中继续存在
答案2
正如 Elijah 所说,最佳做法是修改fish_user_paths
而不是全局PATH
。为了避免再次谷歌搜索此内容……
- 创建几个函数仅修改
fish_user_paths
- 使两个功能都自动加载
要添加到用户路径:
function addpaths
contains -- $argv $fish_user_paths
or set -U fish_user_paths $fish_user_paths $argv
echo "Updated PATH: $PATH"
end
删除用户路径 如果存在(部分归功于这):
function removepath
if set -l index (contains -i $argv[1] $PATH)
set --erase --universal fish_user_paths[$index]
echo "Updated PATH: $PATH"
else
echo "$argv[1] not found in PATH: $PATH"
end
end
当然,为了制作它们自动加载:
funcsave addpaths; funcsave removepath
用法示例:
> addpaths /etc /usr/libexec
Modifying PATH: /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin
> removepath /usr/libexec
Modifying PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/local/bin /usr/bin /bin /usr/sbin /sbin
答案3
这应该会删除从第 6 条路径到最后一条路径:
set -e PATH[6..-1]
-e 标志是擦除。请参阅help set
。
答案4
重置fish_user_paths没有你不再想要的路径:
$ set -U fish_user_paths /usr/local/bin /usr/bin /bin /usr/local/games /usr/game
更多信息:https://fishshell.com/docs/current/tutorial.html#tut_path