我在 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 變數的「魚」方式是實際使用set --universal fish_user_paths $fish_user_paths /new/path/here
.然後,當新會話啟動時, $fish_user_paths 實際上會被加入到 $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
重置魚用戶路徑沒有你不再想要的路徑:
$ 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