2012-04-11 7 views
3

J'appelle bash script B du script A. Dans le script A (script parent), j'exporte certaines variables. Je voudrais utiliser ces variables dans le script B (indice), mais les valeurs des variables ne sont pas transmises du script A au script B. Y a-t-il un moyen d'accéder aux valeurs des variables à partir du script B?appelez un script shell à partir d'un autre script shell via des variables sudo-environnement?

#!/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 

Répondre

8

Comme mentionné @geekosaur, sudo remet à zéro l'environnement pour des raisons de sécurité. Pour préserver l'environnement passe -E passage à sudo.

du sudo manpage: Option

-E

Le -E (préserver l'environnement) indique à la politique de sécurité que l'utilisateur souhaite conserver leurs variables d'environnement existantes. La politique de sécurité peut renvoyer une erreur si l'option -E est spécifiée et l'utilisateur n'a pas la permission de préserver l'environnement.

3

Le problème ici est pas avec le script shell, mais que pour des raisons de sécurité sudo aseptise l'environnement passe au programme il fonctionne. Voir man sudoers pour les détails, et /etc/sudoers sur votre système pour quelles variables d'environnement (le cas échéant) il va préserver.

+0

geekosaur a raison. l'ajout du fichier -E à la commande sudo préserve l'environnement et le transmet à l'indice. – user1325378

0

Si vous voulez garder seulement un ensemble spécifique de variables (plutôt que toutes) pour des raisons de sécurité ou la simplicité, vous pouvez simplement les affecter dans le cadre de la commande sudo:

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