GNU/Linux >> Linux Esercitazione >  >> Linux

Comando non trovato in Zsh, ma trovato in Bash?

Sto usando zsh su Ubuntu e ho creato un collegamento simbolico per bat così:

ln -s /usr/bin/batcat /home/user_name/.local/bin/bat

premendo ls -l da ~/.local/bin mostra:

lrwxrwxrwx 1 tux tux 15 May 19 13:47 bat -> /usr/bin/batcat

Ora da qualsiasi directory (anche in ~/.local/bin ),

Se eseguo bat , ottengo command not found: bat . Eseguendo anche ~/.local/bin non funziona. Tuttavia, eseguendo ./bat (da ~/.local/bin ) funziona. Esecuzione di batcat funziona anche.

echo $PATH mostra che ~/.local/bin è nel percorso

Cosa potrebbe andare storto qui? nessun collegamento simbolico funziona, bat è solo un esempio

PS In bash, le cose funzionano come previsto

Risposta accettata:

Se il tuo PATH contiene effettivamente ~/.local/bin con il carattere letterale della tilde:non funzionerà. La tilde deve essere espansa nella tua home directory.

Ad esempio, una di queste righe è corretta in zsh, bash o qualsiasi altra shell simile a 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"

Funzionano perché ~ viene esteso alla home directory quando si trova all'inizio di una parola, subito dopo il segno di uguale in un'assegnazione o subito dopo un : nella parte destra di un compito (lo scopo di quest'ultima regola è proprio per comodità di impostare PATH ).

Ma una riga come PATH="~/.local/bin:$PATH" non funzionerà, perché ~ non è espanso tra virgolette, quindi il valore di PATH finisce per contenere il carattere letterale ~ . Questo PATH fa riferimento a una directory chiamata ~ nella directory corrente, non nella tua home directory.

Bash¹ ha una funzione in cui ~ viene interpretato come la directory home all'inizio delle voci di percorso. Quindi PATH="~/.local/bin:$PATH" funziona parzialmente in bash. Tuttavia, funziona solo quando esegui un programma direttamente da bash, non quando programmi diversi da bash avviano programmi. Quindi, anche se usi bash, non inserire un ~ letterale nel percorso, assicurati che sia espanso o usa $HOME invece.


Linux
  1. gestore abbonamenti:comando non trovato

  2. id:comando non trovato

  3. w:comando non trovato

  4. df:comando non trovato

  5. du:comando non trovato

[Risolto] bash:sudo:comando non trovato

Risoluzione dei problemi di errore "Bash:comando non trovato" in Linux

Sudo:Nocorrect:comando non trovato?

bash:netstat:comando non trovato.

nc:comando non trovato

aws-shell:comando non trovato