Ho un problema riproducibile:
- imposta il mio PERCORSO in Bash .profile
- avvia tmux da
tmux,tmux attacho qualsiasi variante - echo $ PATH e vederlo con gli stessi componenti ma in ordine diverso
Come fermarlo? Cosa lo spiega?
Ho un problema riproducibile:
tmux, tmux attacho qualsiasi varianteCome fermarlo? Cosa lo spiega?
Risposte:
Se sei su un Mac e ti chiedi perché /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bincontinua a essere anteposto a PATH quando esegui tmux, è a causa di un'utilità chiamata path_helper che viene eseguita dal tuo /etc/profilefile.
Non puoi facilmente convincere tmux (o meglio, bash) a non fare il sorgente /etc/profile(per qualche ragione tmux funziona sempre come una shell di login, il che significa che / etc / profile verrà letto), ma puoi assicurarti che gli effetti di path_helper don avvitalo con il tuo PERCORSO.
Il trucco è assicurarsi che PATH sia vuoto prima dell'esecuzione di path_helper. Nel mio ~/.bash_profilefile ho questo:
if [ -f /etc/profile ]; then
PATH=""
source /etc/profile
fi
L'eliminazione del PERCORSO prima dell'esecuzione di path_helper gli impedirà di anteporre il PERCORSO predefinito al PERCORSO (precedentemente) scelto e consentirà il resto dei tuoi script di configurazione bash personali (comandi più in basso .bash_profile, o in .bashrccaso di provenienza .bash_profile) per configurare il tuo PERCORSO di conseguenza.
Spero che abbia un senso ...
-fcon -e, ma non vorrei personalmente provare a fonte di un file da uno script che viene eseguito quando faccio il login a meno che non avevo controllato che c'era. Tendo a riutilizzare il mio script bash su molte macchine (e sistemi operativi) diversi, quindi mi piace assicurarmi che siano a prova di proiettile. Posso immaginare che alcune altre varianti di Unix potrebbero chiamarlo qualcos'altro.
~/.bash_profilesanità mentale mi ha riportato al mio felice mondo.
set -g default-command "${SHELL}"in .tmux.confforze tmux di utilizzare shell non-login. Non vedo il punto in quelli comunque, dato che di solito apri tmux dopo aver già effettuato l'accesso.
No; l'ordinamento $PATHsarebbe una cosa troppo folle da fare, poiché molti sistemi dipendono dal suo ordine impostato dall'utente.
Tuttavia, tmux fa iniziare la shell in modalità "login", causando ~/.profilead essere di provenienza di nuovo . Questo significa che se hai qualcosa di simile PATH=/my/dir:/another/dir:$PATHin quel file, verrà fatto di nuovo , con conseguente $ PATH contenente /my/dir:/another/dir:/my/dir:/another/dir:(etc.). Per evitare ciò, è possibile utilizzare un'altra variabile per verificare:
if [ "$_SKIP_PROFILE" ]; then
return 0
else
export _SKIP_PROFILE=y
fi
export PATH="/my/dir:/another/dir:$PATH"
@Graham Ashton Grazie per la tua idea
Il mio suggerimento sarebbe quello che hai messo
if [ -f /etc/profile ]; then
PATH=""
source /etc/profile
fi
nel tuo file .zshrc nella parte superiore di esso.
ASSICURARSI che il tuo
export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"
è sotto.
if [ -n "$TMUX" ]clausola, ma mi chiedevo: quanto è importante[ -f /etc/profile ], davvero? Non è sicuro presumere che/etc/profilesia sempre un file normale?