tom*_*ekK 25 shell path environment-variables fish
我在 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
Run Code Online (Sandbox Code Playgroud)
运行这个:
echo $PATH
Run Code Online (Sandbox Code Playgroud)
给我这个:
/usr/lib/x86_64-linux-gnu/libfm /usr/local/bin /usr/bin /bin /usr/local/games /usr/games
Run Code Online (Sandbox Code Playgroud)
在我的系统中没有/usr/lib/x86_64-linux-gnu/libfm,所以我明白为什么鱼在抱怨,但我找不到如何从我的$PATH变量中删除这条路径。
有谁知道我该怎么做?
Eli*_*ynn 43
设置 $PATH 变量的“鱼”方式是实际使用set --universal fish_user_paths $fish_user_paths /new/path/here. 然后 $fish_user_paths 实际上是在新会话开始时添加到 $PATH 变量中的。$PATH文档目前没有告诉你如何删除它。
在fish中,每个变量实际上都是一个列表(数组),您可以通过使用索引/索引方便地直接访问每个项目。echo $fish_user_paths将打印出列表中每个项目的空格分隔版本,使用 translate 函数使空格换行,echo $fish_user_paths | tr " " "\n"然后使用 number lines 函数将行号放在上面echo $fish_user_paths | tr " " "\n" | nl。然后用 删除它set --erase --universal fish_user_paths[5]。您必须使用--universal,否则它将无法在任何新会话中使用。
如果有人有时间,请使用此示例向repo提交 PR 。我在这里打开了一个问题。
tldr;
echo $fish_user_paths | tr " " "\n" | nl // 获取要删除的编号,例如第 5 个set --erase --universal fish_user_paths[5] // 普遍擦除第 5 条路径,以便它在新会话中持续存在clo*_*ach 14
以利亚说,最好的做法是改变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
Run Code Online (Sandbox Code Playgroud)
要删除用户路径 ,如果它存在(部分归功于此):
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
Run Code Online (Sandbox Code Playgroud)
当然,要使它们自动加载:
funcsave addpaths; funcsave removepath
Run Code Online (Sandbox Code Playgroud)
示例用法:
> 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
Run Code Online (Sandbox Code Playgroud)
小智 7
这应该删除路径 6 到最后一条路径:
set -e PATH[6..-1]
Run Code Online (Sandbox Code Playgroud)
-e 标志被擦除。看help set。
| 归档时间: |
|
| 查看次数: |
10465 次 |
| 最近记录: |