2012-04-11 4 views
3

Я вызываю сценарий bash B из сценария A. В сценарии A (родительский скрипт) я экспортирую некоторые переменные. Я хотел бы использовать эти переменные в скрипте B (индекс), но значения переменных не передаются из сценария A в сценарий B. Есть ли способ получить доступ к значениям переменных из сценария B?вызов сценария оболочки из другого сценария оболочки через переменные sudo - environment?

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

ответ

8

Как упомянуто @geekosaur, sudo сбрасывает окружающую среду по соображениям безопасности. Для сохранения окружающей среды пройти -E переключиться на sudo.

из sudo страницы руководства:

-E

-E (сохранение окружающей среды) опция указывает на политику безопасности, что пользователь хочет сохранить существующие переменные окружения. Политика безопасности может возвращать ошибку, если указан параметр -E, и у пользователя нет разрешения на сохранение среды.

3

Проблема здесь заключается не в скрипт, но по соображениям безопасности sudo дезинфицирует среду он проходит в программе работает. См. man sudoers для получения дополнительной информации и /etc/sudoers в вашей системе для каких (если есть) переменных среды, которые он сохранит.

+0

geekosaur является правильным. добавление файла -E в команду sudo сохранит среду и передаст ее в индекс. – user1325378

0

Если вы хотите сохранить только определенный набор переменных (а не все из них) по соображениям безопасности или простоты, вы можете просто назначить их как часть sudo команды:

$ cat test.sh 
#!/usr/bin/env bash 
echo "$foo" 
$ unset foo 
$ foo=bar ./test.sh 
bar 
$ sudo foo=bar ./test.sh 
bar 
Смежные вопросы