450 Stimmen

Kann ich eine Variable aus einem Bash-Skript ohne Quellen in die Umgebung exportieren?

Angenommen, ich habe dieses Skript:

export.bash:

#! /usr/bin/env bash
export VAR="HALLO, VARIABLE"

Wenn ich das Skript ausführe und versuche auf $VAR zuzugreifen, erhalte ich keinen Wert!

echo $VAR

Gibt es eine Möglichkeit, auf $VAR zuzugreifen, indem ich einfach export.bash ausführe, ohne es zu sourcen?

4voto

Malcomar Punkte 94

Die Antwort ist nein, aber für mich habe ich folgendes gemacht

Das Skript:

myExport

#! \bin\bash
export $1

Ein Alias in meiner .bashrc Datei:

alias myExport='source myExport'

Du musst es immer noch sourcen, aber vielleicht ist es auf diese Weise benutzbarer und es ist interessant für jemand anderen.

3voto

ARAVIND SWAMI Punkte 737

Umgebungsvariablen mit Hilfe einer Skriptdatei exportieren

Problem:
Wenn Sie ein Skript ausführen, wird es in einer untergeordneten Shell ausgeführt und kehrt nach der Ausführung zur übergeordneten Shell zurück. Das Exportieren von Variablen funktioniert nur in untergeordneten Shells, Sie können eine Variable einer untergeordneten Shell nicht in die übergeordnete Shell exportieren.

Lösung:
Rufen Sie aus Ihrer Skriptdatei eine untergeordnete Shell auf zusammen mit den Variablen, die Sie exportieren möchten. Dadurch wird eine neue untergeordnete Shell mit Ihren exportierten Variablen erstellt.

script.sh ->

bash -c 'export VAR=Variable; exec bash'

: : CIPH3R

Umgebungsvariablen mit Skript exportieren

2voto

zhi.yang Punkte 425

Vielleicht kannst du eine Funktion in ~/.zshrc oder ~/.bashrc hinzufügen.

# set my env
[ -s ~/.env ] && export MYENV=`cat ~/.env`
function myenv() { [[ -s ~/.env ]] && echo $argv > ~/.env && export MYENV=$argv }

Aufgrund der Verwendung einer Variablen außerhalb, kannst du auf die Verwendung einer Skriptdatei verzichten.

1voto

br4nnigan Punkte 459

Einfacher naiver Ansatz, der funktioniert:

Script 1:

echo "etwas" > /tmp/myvar

Script 2:

myvar=$(cat /tmp/myvar)

1voto

Sam Punkte 67

Wenn Sie eine Variable für die Aufruf-Shell setzen möchten, gibt es einen robusten Ansatz unter Verwendung von C Unix-Sockets. Das Ergebnis wird wie folgt getestet:

$ ./a.out &
[1] 5363
$ ./b.out 123;a=`./b.out`;echo ${a}
123
[1]+  Done                    ./a.out

Siehe a.c, b.c und a.h von meinem Github.

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