2016-04-16 2 views
0

Я пытаюсь использовать переменную среды в сценарии bash, который должен быть запущен как sudo с source.где моя переменная окружения?

У меня есть следующий файл (my_file.sh)

echo "this is DOMAIN = $DOMAIN" 

Я имею переменную DOMAIN среды в моей сессии ..

и теперь мне нужно запустить

sudo -E bash -c "source ./my_file.sh" 

но на выходе не отображается значение для $DOMAIN. вместо этого он пуст.

, если я сменю команду, чтобы быть

sudo -E bash -c "echo $DOMAIN" 

Я вижу правильное значение ..

, что я делаю неправильно?

+1

Я полностью пропустил, что вы уже использовали '-E'. В этом случае вы уверены, что вы экспортируете переменную? – larsks

+0

Во втором примере '$ DOMAIN' разворачивается текущей оболочкой * до того, как он запускает' sudo'. – chepner

+0

OMG .. не экспорт! Я клянусь, что экспорт был там раньше. –

ответ

3

С помощью командной строки:

sudo -E bash -c "source ./my_file.sh" 

вы запускаете скрипт, который может ссылаться на переменные окружения, которые должны были бы быть export ред от родительской оболочки, чтобы быть видимыми.

С другой стороны:

sudo -E bash -c "echo $DOMAIN" 

расширяет значение $DOMAINв родительской оболочке, а не внутри вашей sudo линии.

Чтобы продемонстрировать это, попробуйте свой "рабочий" решение с одинарными кавычками:

sudo -E bash -c 'echo $DOMAIN' 

И сделать вещи идут, попробуйте экспортировать переменную:

export DOMAIN 
sudo -E bash -c "source ./my_file.sh" 

Или попеременно проходят $ DOMAIN на командная строка:

sudo -E bash -c "source ./my_file.sh $DOMAIN" 

И есть сценарий, обратитесь к $1.

+0

Так что, согласно вашему ответу, я должен увидеть $ DOMAIN нет? Я экспортирую его, а затем запустите источник sudo -E bash -c ./my_file.sh "и вы сказали" скрипт, который может ссылаться на переменные окружения, которые нужно будет экспортировать из родительской оболочки, чтобы они были видимыми .. так что я должен это увидеть .. или я что-то упускаю? –

+0

@guymograbi, с одиночным кавычкой 'echo' и переменной, не экспортируемой, вы должны увидеть пустую строку, потому что, насколько это касается sudo'd bash,' $ DOMAIN' не работает и не расширяется до нуля. Когда переменная экспортирована, она будет видна sudo'd 'bash' и ваш скрипт. И да, он * может * ссылаться на переменные окружения. Вы не указали содержимое своего сценария, поэтому я не знаю, что в нем. :-) – ghoti