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.