• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

export in skript

sabine80

Newbie
Hallo,
ich habe jetzt schon wie eine Verrückte gesucht aber nichts gefunden, ich hoffe das ihr mir jetzt helfen könnt.
Ich muß um ein Programm zu testen sehr viele Umgebungsvariablen setzten,
export eins=89
export zwei=77
usw.
das wollte ich jetzt in ein Skript packen und wenn ich es brauche das Skript ausführe so das die Variablen gesetzt werden also nicht in die .profile so das sie immer geladen werden.
Leider funzt das nicht über ein Skript,
beim googlen habe ich gelesen das die skripte über eine subshell ausgeführt werden, ist logisch das die Variablen dann auch nur in dieser gültig sind, es stand auch da man sollte ein "." vor das Skript setzten (sorry kein Plan wie ich das gestartet bekomme)
vielleicht hat ja von euch einer eine idee oder einen link wo ich das nachlesen kann.
schöne grüße und vielen dank
 
A

Anonymous

Gast
du packst deine Variablezuweisungen alle in ein script
Code:
#cat script.in
#!/bin/bash
export eins=BUMM
export zwei=PENG
export drei="noch so ein Quatsch"
diese Script kannst du dann zB in andere scripte einfügen indem du in einem anderem script schreibst
Code:
.  ./script.in
(Punkt Leerzeichen scriptname) oder in die aktuelle bash packen auch mit . /PATH/ZUM/SCRIPT/script.in
die gesetzten Variablen haben dann in dieser Shell und in ihren Abkömmlingen Gültigkeit.

robi
 
OP
S

sabine80

Newbie
@robi
Danke,
das wars, jetzt macht auch der Punkt sinn, man ich war nah dran aber ein leerzeichen nach dem punkt darauf wäre ich nie gekommen, naja man lernt immer wieder was neues.
Gruß
 

TeXpert

Guru
das muss nicht mal ein Script sein, es reicht:

Code:
## script.in
export foo="foo"
export bar="bar"

das wird dann eingebunden:
Code:
#!/bin/bash
## script.sh

source script.in
echo "foo"
echo "bar"

hierbei gilt zusätzlich: das export ist nur relevant, wenn die Variablen auch in Subshells gültig sein sollen, betrachte folgendes Beispiel:

Code:
$ cat a.inc
export foo="foO"
bar="bar"
Code:
$ cat a.sh
#!/bin/bash
source a.inc
if [ -n "$foo" ]
then
  echo "foo in a.sh"
fi
if [ -n "$bar" ]
then
  echo "bar in a.sh"
fi
echo "call b.sh"
sh b.sh
Code:
$ cat b.sh
#!/bin/bash
if [ -n "$foo" ]
then
  echo "foo in b.sh"
fi
if [ -n "$bar" ]
then
  echo "bar in b.sh"
fi
jetzt die Ausführung:

Code:
$ sh a.sh
foo in a.sh
bar in a.sh
call b.sh
foo in b.sh
 
Nur falls es jemanden interessiert:Hintergrund für . <leerzeichen> skript

Normaler werden Settings nur "vererbt". Ein "Childprozess" kann
aber nicht ohne weiteres an sein parent etwas zurückgeben.

Code:
skript
=> skript läuft als child, hat für sich selber die Settings
=> am Ende weiss die aktuelle Shell nix was das child gemacht hat.

Deshalb die ". <leerzeichen> skript" Syntax um etwas in direkt in der Umgebung vom (dann eigentlich nicht) "parent" auszuführen.

". <leerzeichen>Skript" geht bei "sh" "ksh" "bash"

"source <leerzeichen> Skript" kenne ich von tcsh und csh (scheint nach dem Posting von oben auch unter bash zu gehen)

Viele Grüße,

Haveaniceday
 
Oben