Quando uso ZSH, come posso impostare PATH in /etc/profile.d?


22

Sto usando zshcome shell e sto cercando di configurare il mio ambiente.

Di solito definisco la mia $JAVA_HOMEvariabile creando un file:

/etc/profile.d/java.sh

con il seguente contenuto

export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH

quindi esco e rientro, e tutto funziona, ma per qualche ragione la PATHvariabile non è impostata. Riconosce JAVA_HOME, ma non il nuovo PATH, vedere questo frammento di terminale:

~  echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_05
~  echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

e l'ho confermato cercando di eseguire un comando dal jvm

~  java -version
zsh: command not found: java

il PATHnon include il $JAVA_HOMEcome dovrebbe. c'è qualcos'altro che dovrei controllare?

Ho verificato che se corro:

source /etc/profile.d/java.sh

tutto funziona correttamente e le mie variabili vengono impostate come dovrebbero, ma gli script in /etc/profile.desecuzione non dovrebbero essere eseguiti automaticamente?


Hai provato a modificare ~/.profilee posizionare le variabili lì invece? È possibile che PATHvenga sovrascritto altrove /etc/profile.d/.
saiarcot895,

Risposte:


27

Dal mio punto di vista, il modo migliore è aggiungere le seguenti righe al ~/.zshrcfile (se non lo hai già, quindi crearlo):

if [ -d "/path/to/jdk" ] ; then
    export PATH="/path/to/jdk/bin:$PATH"
fi

Quindi riavvia il tuo zsh, o semplicemente esegui source ~/.zshrce quindi il tuo PERCORSO dovrebbe essere esattamente come desideri.

In alternativa, se si desidera apportare la modifica a livello di sistema, aggiungere il codice precedente alla fine del /etc/zsh/zshenvfile.

Ma in ogni caso non utilizzare /etc/profile.dper eseguire automaticamente gli script zsh. Questa directory è utile solo per la bashshell, non zshcome nel tuo caso. Per capirlo, apri il /etc/profilefile, che è un file di inizializzazione bash e in nessun caso un file di inizializzazione zsh , e vedrai da qualche parte alla fine del file:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Quindi, i tuoi script dalla /etc/profile.ddirectory verranno eseguiti automaticamente zshsolo se aggiungi il codice precedente in un file di inizializzazione zsh, come /etc/zsh/zprofilead esempio, o sorgente /etc/profilenel /etc/zsh/zprofilefile.


4
Forse ~/.zprofilepotrebbe essere migliore di ~/.zshrc.
Muru,

3

Trovo che mettere tutto in un .zshenvfile diventi rapidamente difficile da gestire. Consiglio di installare oh-my-sh e di posizionare le varie personalizzazioni (variabili, funzioni) nella .oh-my-sh/custom/directory come .zshfile separati .

Ho anche scoperto che questo approccio funziona perfettamente quando si inserisce la macchina nella modifica di variabili env come PATH. Inoltre funziona davvero bene insieme a vcsh per mantenere il backup e la sincronizzazione delle personalizzazioni.


Usando oh my zsh framework, dove metteresti una variabile con un indirizzo IP (server remoto) da usare per l'accesso ssh? Ho bisogno dell'ip per git e di uno script di accesso al server.
Timo

1
Hm. Non sono sicuro di cosa intendi. ~/.ssh/config
Metterei

Personalmente preferisco questo approccio alla risposta accettata in quanto mi piace il vantaggio di usare vcsh e la cartella "personalizzata" per ZSH è il posto ideale per cose come questa.
Erick Brown,

1

Da quando JAVA_HOMEè impostato, hai confermato che tali script provengono automaticamente, vero?

L'unica spiegazione logica è quella che PATHverrà impostata in seguito in qualche modo. Dovrebbe essere originariamente impostato da PAM che legge /etc/environmente, per quanto ne so, accade prima che i /etc/profile.d/*.shfile vengano acquistati. Forse zsh funziona in modo diverso rispetto a bash in questo senso.


0

Ho appena riscontrato questo problema localmente dopo aver eseguito gli aggiornamenti. Sembra che il problema di root sia che Drush non sa dove trovare una copia legittima di php che includa pdo. Fortunatamente supporta lo stashing di questo percorso in una variabile di ambiente, quindi l'ho fatto sulla riga di comando:

export DRUSH_PHP="/Applications/MAMP/bin/php/php5.4.39/bin/php"

Ciò ha risolto il problema, quindi ho modificato .zshrc e l'ho aggiunto al file, problema risolto.


1
Quindi, stai suggerendo di .zshrcusarlo, lo stesso della risposta migliore ?
muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.