11 Stimmen

Wie man eine Variable in der Bash exportiert

Ich muss eine Systemumgebungsvariable aus einem Bash-Skript setzen, die außerhalb des aktuellen Bereichs verfügbar wäre. Normalerweise würden Sie Umgebungsvariablen wie diese exportieren:

export MY_VAR=/opt/my_var

Allerdings muss die Umgebungsvariable auf Systemebene verfügbar sein. Ist das möglich?

14voto

Douglas Leeder Punkte 50423

Nicht wirklich - sobald Sie in einem Unterprozess laufen, können Sie Ihren Elternprozess nicht mehr beeinflussen.

Es gibt zwei Möglichkeiten:

  1. Fuente das Skript, anstatt es auszuführen (siehe Quelle. ):

    source {script}
  2. Lassen Sie das Skript die Exportbefehle ausgeben, und werten Sie diese aus:

    eval `bash {script}`

    Oder :

    eval "$(bash script.sh)"

6voto

Jeremy Cantrell Punkte 24497

Das ist der einzige Weg, den ich kenne, um das zu tun, was Sie wollen:

In foo.sh haben Sie:

#!/bin/bash
echo MYVAR=abc123

Wenn Sie den Wert der Variablen abfragen wollen, müssen Sie Folgendes tun:

$ eval "$(foo.sh)"  # assuming foo.sh is in your $PATH
$ echo $MYVAR #==> abc123

Das hängt davon ab, was Sie tun wollen und wie Sie es tun wollen, Der Vorschlag von Douglas Leeder über die Verwendung source verwendet werden, aber dann wird die gesamte Datei mit allen Funktionen als Quelle verwendet. Mit eval wird nur das ausgewertet, was geechot wird.

0 Stimmen

Das habe ich auch gerade versucht. Ich hatte eval und $(foo), aber ich habe die Anführungszeichen um das Argument von eval weggelassen. Hat nicht geklappt. Danke für die Korrektur der Syntax.

1voto

nicerobot Punkte 8777

Setzen Sie die Variable in der Datei /etc/profil (erstellen Sie die Datei, falls erforderlich). Dadurch wird die Variable im Wesentlichen für jeden Bash-Prozess verfügbar.

1 Stimmen

Legen Sie eine Datei in /etc/profile.d/ auf modernen Distros.

1voto

koyaanisqatsi Punkte 1465

Wenn ich unter dem root Konto haben und zum Beispiel eine ausführbare X-Datei unter einem normalen Benutzer öffnen möchten, der X ausführt.
Ich muss die DISPLAY Umgebungsvariable mit...

env -i DISPLAY=:0 prog_that_need_xwindows arg1 arg2

0 Stimmen

Die Antwort ist immer noch unvollständig, wenn nicht wie in der akzeptierten Antwort die Erklärung eval enthalten ist. Die Hochstufung gilt einer fairen Alternative zu echo,

1voto

Himanshu Tanwar Punkte 138

Möglicherweise möchten Sie den Quellcode verwenden, anstatt die ausführbare Datei direkt auszuführen:

# Executable : exec.sh
export var="test"
invar="inside variable"

source exec.sh
echo $var    # test
echo $invar  # inside variable

Dadurch wird die Datei ausgeführt, aber in derselben Shell wie die übergeordnete Shell.
Möglicher Nachteil in einigen seltenen Fällen: alle Variablen werden exportiert, unabhängig davon, ob sie explizit exportiert werden oder nicht. Wenn einige Variablen nicht gesetzt werden müssen, sollten diese explizit nicht gesetzt werden. Behandeln Sie importierte Variablen auf ähnliche Weise.

# Executable : exec.sh
export var="test"
invar="inside variable"
# --- #
unset invar

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X