如何從fish中的$PATH變數中刪除路徑?

如何從fish中的$PATH變數中刪除路徑?

我在 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,否則它將無法在任何新會話中工作。

如果有人有時間,請向回購協議以這個例子。我打開了一個問題這裡

太棒了;

  1. echo $fish_user_paths | tr " " "\n" | nl// 取得要刪除的編號,例如第5個
  2. set --erase --universal fish_user_paths[5]// 普遍擦除第五條路徑,使其在新會話中保留

答案2

正如 Elijah 所說,最佳實踐是修改fish_user_paths而不是全局的PATH。為了避免再次谷歌這個......

  1. 建立幾個函數只修改fish_user_paths
  2. 使兩個功能自動載入

新增到使用者路徑:

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

相關內容