GNU/Linux >> Znalost Linux >  >> Linux

Příkaz nebyl nalezen v Zsh, ale nalezen v Bash?

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.


Linux
  1. [Opraveno] bash:sudo:příkaz nenalezen

  2. ifrename:příkaz nenalezen

  3. nc:příkaz nenalezen

  1. rm:příkaz nenalezen

  2. mv:příkaz nenalezen

  3. ln:příkaz nenalezen

  1. Příkaz nenalezen v Bash Opraveno

  2. Sudo:Nocorrect:Příkaz nenalezen?

  3. bash sh - příkaz nenalezen