Ist es unter Linux (Ubuntu 11.04) in bash möglich, vorübergehend eine Umgebungsvariable festzulegen, die sich nur für die Dauer des Skripts von der normalen Variablen unterscheidet? Beispiel: Erstellen Sie in einem Shell-Skript eine App, die in HOME gespeichert wird, portabel, indem Sie HOME vorübergehend in einem Ordner im aktuellen Arbeitsverzeichnis festlegen und dann die App starten.
linux
bash
environment-variables
suchipi
quelle
quelle
Antworten:
quelle
vblank_mode=0 glxgears
. Es funktioniert, aber es heißt auchvblank_mode=0: command not found
nach dem Ausführen, während das Voranstellenenv
dies nicht verursacht. [Testen ...] Anscheinend mag zsh es nicht (verwendet es aber immer noch richtig), aber bash ist damit einverstanden. Ich denke, ich werdeenv
von nun an mit der Methode weitermachen .VAR1="hello" echo $VAR1
nichts zurückgeben?VAR1="hello" bash -c 'echo $VAR1'
quelle
VAR=value myScript args ...
PATH=$PATH:XYZ echo $PATH | grep XYZ
es, dass es keine Ausgabe gibt? 2. Was ist der Unterschied zwischen Verwenden und Nichtverwendenenv
?PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ
- Die einfachen Anführungszeichen sind der Schlüssel hierenv
und Nichtverwenden?IFS=$'\n' for l in lines; do ... done
Einfach gesagt
an der Stelle im Skript, an der die Änderung erfolgen soll. Da jeder Prozess seine eigenen Umgebungsvariablen hat, hat diese Definition beim Beenden des Skripts (und damit der Bash-Instanz mit einer geänderten Umgebung) automatisch keine Bedeutung mehr.
quelle
export
Übergibt die Variable an Subshells, steuert jedoch nicht die übergeordnete Shell. Wenn Sie ein Skript schreiben, das mit "#! / Bin / sh" oder ähnlichem beginnt, verschwindet JEDE von Ihnen festgelegte Variable beim Beenden des Skripts.source
das Skript explizit verwenden , wird es von derselben Shell ausgeführt, in die Sie den Befehl eingeben.$HOME
von Befehlen geerbt werden soll, die vom Skript ausgeführt werden. Und wenn er dies nicht tut und die Einstellung$HOME
nur dem Skript selbst zugute kommt, ist es wahrscheinlich besser, das Skript so zu ändern, dass es sich auf etwas anderes bezieht als$HOME
.