zsh config - per esportare o non esportare?


23

Quando si impostano le variabili nella mia, ~/.zshrcposso usare entrambeexport

export PATH=/some/path

o no

PATH=/some/path

In che modo differiscono e quali dovrei usare?


Le variabili ambientali utilizzate anche da shell non interattive (diciamo, uno script di shell che hai scritto) dovrebbero entrare in .zshenv.
— Francisco,

È ~/.zshenvprovenienti da gusci d'accesso come bene? Dovrebbe PATHessere definito lì?
— jordelver,

1
PATHè probabilmente il miglior esempio di una variabile che dovrebbe essere definita all'interno ~/.zshenv, questo file viene fornito da qualsiasi sessione zsh (a meno che non si usi qualche opzione per disattivarla). Consulta man zshper una revisione di quali file provengono e in quale ordine.
— Francisco,

Ok, grazie @Francisco leggerò la pagina man.
— jordelver,

Risposte:


21

Se vuoi che i programmi vengano eseguiti da zsh per vedere il var, esportalo.
Per il percorso, probabilmente desideri esportare.
Invece di export PATH=/some/pathte probabilmente lo desideri export PATH="$PATH:/some/path", a meno che tu non abbia intenzione di cancellare completamente il percorso predefinito del sistema.


Ottimo, grazie. Adesso userò l'esportazione come regola generale.
— jordelver,

21

Demure ha già risposto alla tua domanda specifica. Tuttavia questa è una zshdomanda e riguardo PATH. Quindi, ecco un altro punto: oltre alla variabile standard $PATH, c'è anche $path, che è un array. Qui vedi la differenza (due punti o meno ...):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

Entrambe le varianti vengono automaticamente sincronizzate. Quindi, qual è il vantaggio dell'utilizzo di un array?

  • Quest'ultimo è possibile dichiarare tramite typeset -U path"mantenere solo la prima occorrenza di ciascun valore duplicato" (da man zshbuiltins). Ciò significa che questo mantiene pulito il tuo percorso, anche se ne procedi in successione ~/.zshrc(perché l'hai modificato o altro) e non lo ingombri più e più volte con gli stessi valori.
  • Puoi usare path+=(/new/path)per aggiungere una nuova directory al tuo PERCORSO. Per rimuovere un elemento devi usare alcuni trucchi, vedi ad esempio /programming//q/3435355/2037712 o http://www.zsh.org/mla/users//2005/msg01132.html
  • Puoi facilmente passare in rassegna gli elementi nel PERCORSO tramite for i ($path) { print $i # or do something else }

Infine, ecco un estratto dalla mia configurazione:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH

Grazie, quella era in realtà una domanda di follow-up. Vedrò come gestire il mio percorso usando pathpiuttosto che PATH.
— jordelver,

1
Sono contento di sentire come ho già temuto di essere OT. Btw. un altro vantaggio che ho dimenticato: puoi facilmente passare in rassegna gli elementi con for i ($path) { print $i # or do something else }.
— mpy
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.