Ich verwende zsh
auf Ubuntu und ich habe einen Symlink für bat
erstellt also:
ln -s /usr/bin/batcat /home/user_name/.local/bin/bat
Drücken Sie ls -l
aus ~/.local/bin
zeigt:
lrwxrwxrwx 1 tux tux 15 May 19 13:47 bat -> /usr/bin/batcat
Jetzt aus jedem Verzeichnis (sogar in ~/.local/bin
),
Wenn ich bat
ausführe , erhalte ich command not found: bat
. Läuft auch ~/.local/bin
funktioniert nicht. Wenn Sie jedoch ./bat
ausführen (aus ~/.local/bin
) funktioniert. Ausführen von batcat
geht auch.
echo $PATH
zeigt, dass ~/.local/bin
befindet sich im Pfad
Was könnte hier schief laufen? Kein Symlink funktioniert, bat
ist nur ein Beispiel
P.S. In Bash funktionieren die Dinge wie erwartet
Akzeptierte Antwort:
Wenn Ihr PATH
enthält tatsächlich ~/.local/bin
mit dem wörtlichen Tilde-Zeichen:das wird nicht funktionieren. Die Tilde muss in Ihr Home-Verzeichnis expandiert werden.
Zum Beispiel ist jede dieser Zeilen in zsh, bash oder jeder anderen sh-ähnlichen Shell korrekt:
PATH=~/.local/bin:$PATH
PATH=$PATH:~/.local/bin
PATH=~/.local/bin:"$PATH"
PATH="$PATH":~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
export PATH="$PATH:$HOME/.local/bin"
Sie funktionieren, weil ~
wird in das Home-Verzeichnis expandiert, wenn es am Anfang eines Wortes steht, unmittelbar nach dem Gleichheitszeichen in einer Zuweisung oder unmittelbar nach einem :
auf der rechten Seite einer Zuweisung (der Zweck dieser letzten Regel besteht genau darin, PATH
bequem zu setzen ).
Aber eine Zeile wie PATH="~/.local/bin:$PATH"
funktioniert nicht, weil ~
wird nicht in doppelte Anführungszeichen erweitert, also der Wert von PATH
enthält am Ende das Literalzeichen ~
. Dieser PATH
verweist auf ein Verzeichnis namens ~
im aktuellen Verzeichnis, nicht in Ihrem Home-Verzeichnis.
Bash¹ hat eine Funktion, in der ~
wird am Beginn von Pfadangaben als Heimatverzeichnis interpretiert. Also PATH="~/.local/bin:$PATH"
funktioniert teilweise in bash. Es funktioniert jedoch nur, wenn Sie ein Programm direkt von Bash aus ausführen, nicht, wenn andere Programme als Bash selbst Programme starten. Auch wenn Sie bash verwenden, geben Sie also keinen wörtlichen ~
ein Stellen Sie im Pfad sicher, dass er erweitert ist, oder verwenden Sie $HOME
stattdessen.