2017-07-19 8 views
0

Ich bin Windows CMD-Skript zu bin/Bash auf Unix migrieren. Das Ziel des ersten Skripts war das Einrichten einiger Variablen, also nachdem alles, was von diesem Cmd-Fenster ausgeführt wurde, diese Variablen verwendete. Wie kann ich unter UNIX dasselbe tun? Sieht aus wie einfachInitialisierung von Variablen in Bash

MyVar="value" 

funktioniert nicht. Es ist nur im Skript selbst sichtbar, nicht im Terminal, in dem es ausgeführt wurde.

+0

Warum denkst du, dass es nicht funktioniert? – hsz

+2

Sie können die übergeordnete Umgebung nicht ändern. Geben Sie das Skript an, anstatt es auszuführen, wenn Sie einige Variablen in der * aktuellen * Sitzung festlegen möchten. –

Antwort

1

Sie können Shell-Variablen mit einfachen Zuordnungen

$ foo="fooval" 
$ echo $foo 
    fooval 

Diese Variablen initialisiert werden nicht an unabhängige Kindprozesse verteilt:

$ foo=fooval 
$ sh -c 'printf "\"%s\"" $foo' 
    "" 

, um sie zu verbreiten, müssen Sie sie in den Prozess der Export (Shells) Umgebung (machen Sie sie zu "Umgebungsvariablen" (diese werden üblicherweise großgeschrieben, dh FOO anstelle von foo)

$ export foo 
$ sh -c 'echo $foo' 
    fooval 

Sie können in einem Schritt zuordnen und Export:

$ export foo=fooval 

Umgebungsvariablen werden nie wieder irgendwo, sondern auf der Prozesshierarchie verteilt. (Nur für Kinder, nie an die Eltern oder völlig unabhängige Prozesse) Deshalb, wenn Sie ein Skript mit Variablenzuweisungen haben, müssen Sie es beziehen, nicht ausführen:

$ ./envvars #won't affect the parent shell 
$ . ./envvars #this will 

Es gibt keine pro-terminalen Variablen (Es gibt jedoch per-Terminal-Konfigurationen mit festen Tasten zugänglich manipulierbar mit dem stty Werkzeug).

1

Erstellen Sie eine Datei test.sh

die folgende Zeile hinzufügen:

export b="key" 

nun das Terminal lese und wie folgt vorgehen:

source ./test.sh 
echo $b 

Ausgang:

key 
Verwandte Themen