2014-05-08 2 views
4

Я пишу сценарий bash, предназначенный для работы в удаленном стеке AMP. Скрипт должен получить доступ к предопределенной переменной среды PHP ($ _ENV).Как получить доступ к переменным среды PHP в сценарии bash?

Это то, что я хочу:

db_host=$(php -r 'echo $_ENV{DATABASE_SERVER};') 
echo "The DB Host is: $db_host" 
# output: "The DB Host is: internal-db.s173785.gridserver.com" 

Это то, что я получаю вместо этого:

# METHOD 1 
db_host1=$(php -r 'echo $_ENV{DATABASE_SERVER};') 
echo "The DB Host is: $db_host1" 
# output: "The DB Host is: " 

# METHOD 2 
db_host2=`php -r 'echo get_env(DATABASE_SERVER);'` 
echo "The DB Host is: $db_host2" 
# output: "The DB Host is: " 

Ни один метод работает, обе переменные возвращаются пустыми. Я знаю, что эта переменная PHP установлен, потому что, когда я печатаю это в терминал (после ssh'ing на сервер), я получаю ожидаемое значение:

$ php -r 'echo $_ENV{DATABASE_SERVER};' 
# outputs: "internal-db.s173785.gridserver.com" 

Технически эти методы должны работать, потому что мне удалось чтобы получить эту работу в моем сценарии:

php_user=$(php -r 'echo getenv("USER");') 
echo php_user is $php_user 
# outputs: "php_user is myusername" 

Каждый знает, что я делаю неправильно \

*** ОБНОВЛЕНИЕ *******

?

я должен упомянуть, что я ссылаться этот сценарий из моей локальной машине, так как:

ssh -t [email protected] "myscript backup_remote_db" 

«MyScript» это имя моего исполняемого Баш скрипт, и «backup_remote_db» функция я передаю к нему, который содержит код выше.

Это не может быть причиной, однако, потому что, когда я эхо $ USER в сценарии, это эхо удаленного пользователя, а не локальный один ...

*** UPDATE 2 ******

Вот как я, наконец, получил это работает:

db_host=$DATABASE_SERVER 
echo "The DB Host is $db_host" 
# output: "The DB Host is: internal-db.s173785.gridserver.com" 

Но только если я делаю эту корректировку как вызывается скрипт:

ssh -t [email protected] ". /etc/profile; myscript backup_remote_db" 
+0

Что печатает 'echo $ DATABASE_SERVER'? –

+0

Я получаю internal-db.s173785.gridserver.com !!brilliant –

+0

Вам не нужен php для получения переменных окружения в вашей оболочке –

ответ

4

Вам не нужно PHP для переменной среды прибудет в вашей оболочке

Просто распечатайте его:

echo "The DB Host is $DATABASE_SERVER" 

И для полного ответа, я полагаю, что PHP не работает, потому что вы получите уведомление Use of undefined constant PATH, вы должны обернуть свои аргументы строки.
Это должно работать:

v=$(php -r 'print_r(getenv("DATABASE_SERVER"));') 
echo "DB: $v" 

Update: .bashrc не получены, когда вы войти, используя SSH. Вы должны указать его в свой .bash_profile следующим образом:

if [ -f ~/.bashrc ]; then 
    . ~/.bashrc 
fi 
+0

При использовании одинарных кавычек в 'echo'' bash' '' $ v' не интерпретируется (он печатает 'DB: $ v'), тогда как с двойными кавычками он печатает ожидаемый результат. – DanFromGermany

+0

К сожалению, это не работает для меня, 'v' по-прежнему приходит пустым –

+0

@DanFromGermany, извините, вы правы :) –

Смежные вопросы