2012-04-11 9 views
3

Ich rufe Bash-Skript B von Skript A auf. In Skript A (Eltern-Skript) exportiere ich einige Variablen. Ich möchte diese Variablen in Skript B (tiefgestellt) verwenden, aber die Variablenwerte werden nicht von Skript A an Skript B weitergegeben. Gibt es eine Möglichkeit, auf die Variablenwerte von Skript B zuzugreifen? rufen Sie ein Shell-Skript aus einem anderen Shell-Skript über sudo - Umgebungsvariablen?

#!/bin/bash 
# script_A.sh 
export VAR="value" 
enter code here 
sudo -u user ./script_B.sh 

#!/bin/bash 
# script_B.sh 
echo $VAR # this prints nothing 

Antwort

8

Wie @geekosaur erwähnt, sudo setzt die Umgebung aus Sicherheitsgründen zurück. Um die Umwelt zu erhalten pass -E wechseln Sie zu sudo.

vom sudo manpage:

-E

Die -E (konservieren Umwelt) Option zeigt die Sicherheitsrichtlinie, die der Benutzer wünscht, ihre bestehenden Umgebungsvariablen zu erhalten. Die Sicherheitsrichtlinie gibt möglicherweise einen Fehler zurück, wenn die Option -E angegeben ist und der Benutzer nicht die Berechtigung zum Schutz der Umgebung hat.

3

Das Problem hier ist nicht mit dem Shell-Skript, aber das aus Sicherheitsgründen sudo reinigt die Umwelt es das Programm geht es läuft. Details finden Sie unter man sudoers und /etc/sudoers auf Ihrem System für welche Umgebungsvariablen (falls vorhanden) beibehalten werden.

+0

Geekosaur hat Recht. Durch Hinzufügen der -E-Datei zum Befehl sudo wird die Umgebung beibehalten und an den Index übergeben. – user1325378

0

Wenn Sie nur eine bestimmte Gruppe von Variablen behalten wollen (und nicht alle von ihnen) aus Gründen der Sicherheit oder Einfachheit, können Sie einfach sie als Teil des sudo Befehl zuweisen:

$ cat test.sh 
#!/usr/bin/env bash 
echo "$foo" 
$ unset foo 
$ foo=bar ./test.sh 
bar 
$ sudo foo=bar ./test.sh 
bar 
Verwandte Themen