/ / Wie behalte ich Funktionen / Variablen lokal zu meinem zshrc? - zsh, zshrc

Wie behalte ich Funktionen / Variablen lokal für meine zshrc? - zsh, zshrc

Jede Variable, die ich in meiner deklariere zshrc ist in der Shell als Umgebungsvariable verfügbar. Ich möchte nicht, dass das passiert.

Ich habe versucht, die Variablen in eine Funktion zu setzen und sie als lokal zu setzen, aber dann ist die Funktion außerhalb der zshrc.

Wie kann ich es so machen? Was in meinem zshrc passiert, bleibt in meinem zshrc?

Antworten:

16 für die Antwort № 1

Sie sind verfügbar, aber sie werden nicht exportiert, sodass Skripts, die über die Befehlszeile gestartet werden, diese Variablen nicht erhalten. Wenn dein .zshrc sieht aus wie

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

und du willst dann nie starten zshrc Funktion wieder können Sie einfach tun

unfunction zshrc

danach.


28 für die Antwort № 2

Wenn Sie eine aktuelle Version von zsh verwenden, können Sie eine anonyme Funktion verwenden:

function () {
local xyz=abc
# whatever
}

Die Funktion wird automatisch ausgeführt und dann weggeworfen, sie existiert nur zu Zwecken des Scoping.

Das funktioniert für jede Quelldateinicht nur zshrc.


5 für die Antwort № 3

Wenn Sie das Wort nicht anhängen local zu einer Variablen wird es bleiben, bis Sie einen der folgenden tun:

  1. Öffnen Sie ein neues Terminalfenster.
  2. Lauf exec zsh oder exec bash abhängig von deiner Shell. Dies löscht nur Ihre lokalen Variablen, die nicht mit dem Wort zugewiesen wurden local.

Vermeiden Sie dies

method_name(){
a=11
echo $a
}

Korrektes Beispiel

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

Diese Variable ist auf den Funktionsnamen beschränkt method_name und nur innerhalb der Funktion verfügbar, wenn sie aufgerufen wird (und nicht danach).

Wenn Sie direkten Zugriff auf diese lokale Variable haben möchten, können Sie dies auf diese Weise einstellen

local z=11

Und nenne es so

echo $z

Abhängig von deiner Shell und deinen Bedürfnissen, kannst du sie benutzen .bash_profile oder .bashrc oder .zshrc usw., um Funktionen und Aliase zu speichern.

Weitere Informationen zu Umgebungsvariablen und ihren jeweiligen Shells finden Sie in dieser Referenz

Lesen Sie dies auch, um zu verstehen, wie Umgebungsvariablen in der Befehlszeile mithilfe von Shell-Erweiterungen festgelegt werden

Sie können Umgebungsvariablen schnell mit anzeigen env oder printenv

Die Konvention besteht darin, Großbuchstaben zu verwenden

Temporäres Festlegen einer Umgebungsvariablen (wird gespeichert, bis Sie das Terminal schließen)

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

Angenommen, Sie haben ein neues Terminalfenster geöffnet oderSourcing .zshrc oder .bashrc oder was auch immer Sie verwenden, können Sie diese Umgebungsvariable jetzt verwenden, bis Sie Ihre Terminalsitzung schließen. Hinweis: Verwenden Sie bei der Einstellung nicht $, sondern $ beim Verweisen auf die Variable.

Beispiele

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

echo "$A"

So erhalten Sie eine Datei

source ~/path/to/file/filename

Beispiel

source ~/.bash_profile

So legen Sie eine Umgebungsvariable fest (bis Sie sie entfernen oder erneut festlegen)

Benutze den obigen Code, aber lege ihn in dein ~ / .bash_profile oder ~ / .zshrc oder eine andere entsprechende Datei. Speichern Sie die Datei und geben Sie sie ein.

Beispiel

export B="11 is part of this string"

Sie können es jetzt mit ansehen

env

Um diese Umgebungsvariable zu entfernen, entfernen Sie sie aus der Datei und geben Sie die Datei erneut ein.

Um eine Umgebungsvariable vorübergehend zu entfernen, verwenden Sie Unscharf

Beispiel

unset B

Beachten Sie, dass es keine gibt $ beim Unscharfschalten.

So legen Sie Umgebungsvariablen über die Befehlszeile fest

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

Überprüfen Sie die Datei, an die Sie es senden, es kann nicht in einer neuen Zeile beginnen, es wurde möglicherweise mit Ihrer letzten Zeile verkettet, die eine andere Funktion, Alias ​​oder andere war.

Dies ist keine vollständige Antwort, aber es ist ein großer Schritt in die richtige Richtung. Es zeigt, wie der Umfang in einer Terminal-Shell gesetzt, verwendet und entfernt werden kann.