wie man Umgebungsvariablen in Fischschalen setzt

87

Kann mir bitte jemand sagen, wie man eine Reihe von Umgebungsvariablen in der Fischschale richtig einstellt?

In meiner Datei .config / fish / config.fish habe ich eine Funktion, um meine Umgebungsvariablen so einzurichten

function setTESTENV
      set -x BROKER_IP '10.14.16.216'
      set -x USERNAME 'foo'
      set -x USERPASS 'bar'
end 

Wenn ich an der Eingabeaufforderung tippe setTESTENVund envin der Befehlszeile ein tippe, werden diese Informationen nicht angezeigt .

cfpete
quelle

Antworten:

66

Die Variablen, die Sie deklarieren, werden in einem lokalen Bereich innerhalb Ihrer Funktion gespeichert.

Verwenden:

set -g -x

Hier ist " g" für global.

JosEduSol
quelle
145

Verwenden Sie universelle Variablen

Wenn die Variable zwischen allen den aktuellen Benutzer Fisch - Instanzen auf dem aktuellen Computer werden muss geteilt und Neustarts erhalten von der Shell Sie verwenden -Uoder --universal:

set -Ux FOO bar

Wenn Sie die Variable setmit -goder --globalnicht dauerhaft zwischen Shell-Instanzen festlegen


Hinweis :

Nicht an universelle Variablen in der config.fishDatei anhängen , da diese Variablen dann mit jeder neuen Shell-Instanz länger werden. Führen Sie set einfach -Uxeinmal in der Befehlszeile aus. Und es wird in der Datei gespeichert werden .config/fish/fishd.MACHINE_ID, wo MACHINE_IDnormalerweise Adresse MAC ist.

Paolo Moretti
quelle
Meine Variablen wurden nicht in gespeichert fishd.MACHINE_ID, sondern in~/.config/fish/fish_variables
Seanny123
Meine Variable wurde ~/.config/fish/fish_variablesam Ubuntu 20.04
Igor Markelov
11

Eine andere Option ist das Ausführen von:

export (cat env_file.txt |xargs -L 1)

Dabei enthält env_file.txt Zeilen des Formats VAR=VALUE

Dies hat den Vorteil, dass die Variablen in einem Format gehalten werden, das von anderen Shells und Tools unterstützt wird

Ophir Yoktan
quelle
9

Umgebungsvariablen in Fischen

Ich möchte hinzufügen, dass die Antwort von @ JosEduSol zwar nicht falsch ist und zur Lösung des OP-Problems beiträgt -g, der Bereich jedoch nur auf global festgelegt wird-x die angegebene Umgebungsvariable in untergeordnete Prozesse exportiert wird.

Der Grund, warum dies fehlschlägt, liegt darin, dass @cfpete die env-Variablen innerhalb einer Funktion festlegt und der Standardbereich für diese Funktion lokal ist.

Jorge Bucaran
quelle