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.