/ / Come mantenere le funzioni / variabili locali nel mio zshrc? - zsh, zshrc

Come faccio a mantenere le funzioni / variabili locali al mio zshrc? - zsh, zshrc

Qualsiasi variabile che dichiaro nel mio zshrc è disponibile nella shell come variabile di ambiente. Non voglio che questo accada.

Ho provato a inserire le variabili in una funzione e ad impostarle come locali, ma la funzione è disponibile al di fuori di zshrc.

Come posso renderlo così quello che succede nel mio zshrc rimane nel mio zshrc?

risposte:

16 per risposta № 1

Sono disponibili, ma non vengono esportati in modo tale che gli script che vengono lanciati dalla riga di comando non ottengano queste variabili. Se tuo .zshrc sembra

function zshrc()
{
local VAR=1
# Do stuff
}
zshrc

e tu poi non vuoi mai lanciare zshrc funzione di nuovo che puoi fare

unfunction zshrc

successivamente.


28 per risposta № 2

Se stai usando una versione recente di zsh puoi usare una funzione anonima:

function () {
local xyz=abc
# whatever
}

La funzione verrà automaticamente eseguita e quindi gettata via, esiste solo per scopi di scoping.

Questo funziona per qualsiasi file originario, non solo zshrc.


5 per risposta № 3

Se non aggiungi la parola local a una variabile rimarrà finché non si esegue una delle seguenti operazioni:

  1. Apri una nuova finestra di terminale.
  2. Correre exec zsh o exec bash dipende dalla tua shell. Questo cancella solo le variabili locali che non sono state assegnate con la parola local.

Evita questo

method_name(){
a=11
echo $a
}

Esempio corretto

method_name(){
local a=11
echo $a
}

Questa variabile ha lo scopo del nome della funzione method_name e disponibile solo all'interno della funzione quando chiamato (e non in seguito).

Se vuoi l'accesso diretto a quella variabile locale, puoi impostarla in questo modo

local z=11

E chiamalo così

echo $z

A seconda della shell e delle esigenze, è possibile utilizzarlo .bash_profile o .bashrc o .zshrc ecc. per memorizzare funzioni e alias.

Visualizza questo riferimento per ulteriori informazioni sulle variabili di ambiente e le rispettive shell

Leggi anche questo per capire come impostare le variabili d'ambiente sulla riga di comando usando le espansioni di shell

È possibile visualizzare rapidamente le variabili di ambiente con env o printenv

La convenzione è usare MAIUSCOLA

Per impostare temporaneamente una variabile di ambiente (memorizzata fino alla chiusura del terminale)

export A=11 o export B="11 is part of this string"

Supponendo che tu abbia aperto una nuova finestra di terminale ofonte .zshrc o .bashrc o qualsiasi altra cosa tu stia utilizzando ora puoi usare questa variabile d'ambiente fino a quando non chiudi la sessione del terminale. Nota: non usare $ quando si imposta, ma usare $ quando si fa riferimento alla variabile.

Esempi

echo "A is equal to: $A and that is pretty nice"

echo "$A"

Come fonte un file

source ~/path/to/file/filename

Esempio

source ~/.bash_profile

Per impostare una variabile di ambiente (fino a quando non la rimuovi o la reimposti)

Usa il codice qui sopra ma mettilo nel tuo ~ / .bash_profile o ~ / .zshrc o in un altro file rispettivo. Salva il file e cercalo.

Esempio

export B="11 is part of this string"

Ora puoi vederlo con

env

Per rimuovere quella variabile d'ambiente, rimuovila dal file e di nuovo il file.

Per rimuovere temporaneamente una variabile ambientale, utilizzare unset

Esempio

unset B

Nota c'è no $ quando si disinserisce.

Per impostare le variabili di ambiente dalla riga di comando

export BLABLA="environment variable set from the command line, saved in file for later use"

Controlla il file che stai inviando, potrebbe non iniziare su una nuova riga, potrebbe essere stato concatenato alla tua ultima riga che era un'altra funzione, un alias o altro.

Questa non è una risposta completa, ma è un grande passo nella giusta direzione. Mostra come è possibile impostare, utilizzare e rimuovere lo scope in una shell di terminale.