Unterschied zwischen set -g und set -x

320
11th Hour Worker

Ich migriere gerade von bash configs zu fish und stecke beim Übersetzen meiner over-bash-Exporte fest. Es scheint, dass es in Fish drei Möglichkeiten gibt, die Arbeit zu erledigen, aber ich kann nicht sagen, welche ich verwenden sollte, oder ob sie Nebenwirkungen haben, von denen ich nichts weiß

set -g VAR value set -x VAR value set -xg VAR value 

Sicher machen sie nicht alle dasselbe. Kann jemand erklären, was die Unterschiede sind und in welchen Situationen sie jeweils angemessen ist?

0
Wenn Sie set -h eingeben, werden die Bedeutungen unter den Bereichsoptionen angezeigt. AFH vor 5 Jahren 0

1 Antwort auf die Frage

3
Kurtis Rader

Nein, sie machen nicht alle dasselbe. Die -xFlagge ist orthogonal zu den -g, -lund -uFahnen. Ersteres setzt einfach das Exportattribut auf die Var. Die letzten drei geben den Umfang der Var. Sie können eine globale, nicht exportierte VARFunktion haben und innerhalb einer Funktion set -lx VAR valueeine Instanz mit lokalem Bereich erstellen, die exportiert wird. Wenn die Kontrolle von der Funktion zurückkehrt, wird der globale Gültigkeitsbereich VARwieder hergestellt und nicht exportiert.

Wenn Sie eine aktuelle Version (2.7, möglicherweise 2.6) verwenden, können Sie set --show VARdie Werte in allen drei Bereichen anzeigen und angeben, ob jeder Wert exportiert wird.

Sorry, was bedeutet es, eine Variable zu exportieren? 11th Hour Worker vor 5 Jahren 0
Eine exportierte Variable ist für Befehle sichtbar, die von Ihrer Fischmuschel ausgeführt werden. Set -g NOT_EXPORTED abc; set -gx EXPORTED def; env | grep EXPORTED ". Beachten Sie, dass `env` ein externer Befehl ist, der die exportierten Variablen anzeigt, die er übernommen hat. Es sollte zeigen, dass nur die mit set -gx erstellte var vorhanden ist. Kurtis Rader vor 5 Jahren 0
Danke, dass Sie Kurtis erklärt haben. Das habe ich mir gedacht, aber jetzt bin ich verwirrt, warum ich die Umgebungsvariablen sehen kann, die ich mithilfe von set -g in meiner config.fish eingestellt habe. 11th Hour Worker vor 5 Jahren 0
Wenn die Variable bereits exportiert ist, behält `set -g` das exportierte Attribut bei. Wenn Sie zum Beispiel etwas wie `set -g PATH / dir1 / dir2 $ PATH` ausführen, bleibt es exportiert, da es sich in der exportierten Umgebung befand, als Fische gestartet wurden. Kurtis Rader vor 5 Jahren 0
Ich habe meine Variable zuvor mit -x zum Testen definiert und diese Zeile nicht gelöscht. Ich habe erwartet, dass sie bei meiner nächsten Deklaration meiner Variablen überschrieben wird. Vielen Dank, Kurtis! Das macht jetzt alles für mich Sinn :) 11th Hour Worker vor 5 Jahren 0