Používám zsh na ubuntu a vytvořil jsem symbolický odkaz pro bat jako tak:
ln -s /usr/bin/batcat /home/user_name/.local/bin/bat
stisknutím ls -l z ~/.local/bin ukazuje:
lrwxrwxrwx 1 tux tux 15 May 19 13:47 bat -> /usr/bin/batcat
Nyní z libovolného adresáře (dokonce i v ~/.local/bin ),
Pokud spustím bat , dostávám command not found: bat . Také běží ~/.local/bin nefunguje. Nicméně spuštěním ./bat (z ~/.local/bin ) funguje. Spuštění batcat také funguje.
echo $PATH ukazuje, že ~/.local/bin je v cestě
Co by se tu mohlo pokazit? nefunguje žádný symbolický odkaz, bat je jen příklad
P.S. V bash věci fungují podle očekávání
Přijatá odpověď:
Pokud je vaše PATH ve skutečnosti obsahuje ~/.local/bin s doslovným znakem vlnovky:to nebude fungovat. Vlnovku je třeba rozšířit do vašeho domovského adresáře.
Například kterýkoli z těchto řádků je správný v zsh, bash nebo jakémkoli jiném shellu podobném sh:
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"
Fungují, protože ~ se rozbalí do domovského adresáře, když je na začátku slova, bezprostředně za rovnítkem v přiřazení nebo bezprostředně za : na pravé straně úkolu (účelem tohoto posledního pravidla je právě pohodlí nastavení PATH ).
Ale řádek jako PATH="~/.local/bin:$PATH" nebude fungovat, protože ~ není rozšířen do dvojitých uvozovek, takže hodnota PATH skončí obsahující doslovný znak ~ . Tato PATH odkazuje na adresář s názvem ~ v aktuálním adresáři, nikoli ve vašem domovském adresáři.
Bash¹ má funkci, ve které ~ je interpretován jako domovský adresář na začátku položek cesty. Takže PATH="~/.local/bin:$PATH" částečně funguje v bash. Funguje to však pouze tehdy, když spouštíte program přímo z bash, nikoli když programy jiné než bash samotné spouštějí programy. Takže i když používáte bash, nevkládejte doslovné ~ v cestě se ujistěte, že je rozbalená, nebo použijte $HOME místo toho.