Wie entferne ich einen Pfad aus der Variable $PATH in Fish?

Wie entferne ich einen Pfad aus der Variable $PATH in Fish?

Ich verwende Fish als meine Shell in Debian und seit kurzem (nach einigen Upgrades) erhalte ich Folgendes, wenn ich versuche, die Befehlsvervollständigung zu verwenden:

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

Folgendes ausführen:

echo $PATH 

Gibt mir dies:

/usr/lib/x86_64-linux-gnu/libfm /usr/local/bin /usr/bin /bin /usr/local/games /usr/games

In meinem System gibt es kein /usr/lib/x86_64-linux-gnu/libfm, daher verstehe ich, warum Fish sich beschwert, aber ich kann nicht herausfinden, wie ich diesen Pfad aus meiner $PATHVariable entfernen kann.

Weiß jemand, wie ich das machen kann?

Antwort1

Die 'fish'-Methode zum Setzen der $PATH-Variable besteht darin, tatsächlich zu verwenden set --universal fish_user_paths $fish_user_paths /new/path/here. Dann wird $fish_user_paths tatsächlich der $PATH-Variable vorangestellt, wenn eine neue Sitzung beginnt. Die $PATHDokumentationsagt Ihnen derzeit jedoch nicht, wie Sie es löschen können.

In Fish ist jede Variable eigentlich eine Liste (ein Array), und Sie können bequem über einen Index/Index direkt auf jedes Element zugreifen. echo $fish_user_pathsdruckt eine durch Leerzeichen getrennte Version jedes Elements in der Liste aus, macht die Leerzeichen mit der Funktion „translate“ zu Zeilenumbrüchen echo $fish_user_paths | tr " " "\n"und nummeriert sie dann mit der Funktion „number lines“, echo $fish_user_paths | tr " " "\n" | nl. Löschen Sie sie dann mit set --erase --universal fish_user_paths[5]. Sie müssen verwenden --universal, sonst funktioniert es in keiner neuen Sitzung.

Wenn jemand Zeit hat, bitte eine PR an dierepomit diesem Beispiel. Ich habe ein Problem eröffnetHier.

kurz und knapp;

  1. echo $fish_user_paths | tr " " "\n" | nl// Holen Sie sich die Nummer derjenigen, die Sie löschen möchten, z. B. die 5.
  2. set --erase --universal fish_user_paths[5]// den 5. Pfad universell löschen, damit er in neuen Sitzungen erhalten bleibt

Antwort2

Wie Elijah sagt, ist es am besten, das zu ändern, fish_user_pathsnicht das globale PATH. Um das nie wieder googeln zu müssen …

  1. Erstellen Sie einige Funktionen, dienur ändernfish_user_paths
  2. Machen Sie beide Funktionenautomatisches Laden

So fügen Sie Benutzerpfade hinzu:

function addpaths
    contains -- $argv $fish_user_paths
       or set -U fish_user_paths $fish_user_paths $argv
    echo "Updated PATH: $PATH"
end

So entfernen Sie einen Benutzerpfad wenn es existiert(Teilgutschrift fürDas):

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

Und natürlich, um sieautomatisches Laden:

funcsave addpaths; funcsave removepath

Anwendungsbeispiel:

> 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

Antwort3

Dadurch sollten die Pfade 6 bis zum letzten Pfad gelöscht werden:

set -e PATH[6..-1]

Das Flag -e ist Löschen. Siehe help set.

Antwort4

Zurücksetzenfish_user_pathsohne den Weg, den Sie nicht mehr wollen:

 $ set -U fish_user_paths /usr/local/bin /usr/bin /bin /usr/local/games /usr/game

Mehr Info:https://fishshell.com/docs/current/tutorial.html#tut_path

verwandte Informationen