Переменные между bash и php-cli - PullRequest
2 голосов
/ 09 мая 2011

Я хочу передать переменные из bash в php в 1 скрипте. Я знаю, что это возможно с 2 файлами и $ argv в php, но я бы очень хотел поместить скрипт в 1 файл. Вот что я получил сейчас:

#!/bin/bash
echo "This is bash"
export VAR="blabla"

/usr/bin/php << EOF
<?php

echo getenv("VAR");

?>
EOF

, который работает нормально. Но есть одна проблема: я не могу сохранить getenv в переменной.

#!/bin/bash
echo "This is bash"
export VAR="blabla"

/usr/bin/php << EOF
<?php

$var = getenv("VAR");
echo $var;

?>
EOF

Дает мне эту ошибку: PHP Parse error: синтаксическая ошибка, неожиданная '=' в строке 3

Я получаю ту же ошибку, если даже пытаюсь определить базовую переменную, такую ​​как $ var = "hello";

Ответы [ 4 ]

4 голосов
/ 09 мая 2011

Ваша проблема в том, что и bash, и php используют знак доллара для переменных.Когда вы говорите это в своем heredoc:

$var = getenv("VAR");

bash пытался заменить $var значением переменной оболочки var, и это, вероятно, пусто;В результате PHP видит что-то вроде этого:

<?php

= getenv("VAR");
echo ;

?>

Отсюда и возникает «неожиданная ошибка» = *.

Попробуйте экранировать знаки доллара в вашем PHP:

#!/bin/bash
echo "This is bash"
export VAR="blabla"

/usr/bin/php << EOF
<?php

\$var = getenv("VAR");
echo \$var;

?>
EOF

Heredoc bash оценивает переменные, как строка в двойных кавычках.

1 голос
/ 10 мая 2011

Если вы не позволяете оболочке интерпретировать скрипт PHP, заключите в кавычки разделитель для вашего здесь документа:

/usr/bin/php << 'EOF'
<?php $var = getenv("VAR"); echo $var; ?>
EOF
1 голос
/ 09 мая 2011

Вы столкнулись с одной ловушкой, которая связана со способом, которым вы хотите заниматься, - двумя сценариями в одном файле, одним для Bash, другим для PHP.Проблема в том, что $var интерпретируется оболочкой, оставляя PHP с = getenv("VAR"); там, где ожидается оператор, и, следовательно, синтаксическая ошибка.

Другое дело, что вам не нужно тянуть VARиз env до тех пор, пока вы храните оба сценария в одном файле (начать с которого я считаю плохой идеей).

Вот как это можно сделать (не проверено):

#!/bin/bash
echo "This is bash"
VAR="blabla" # normal variable, no need to export

/usr/bin/php << EOF
<?php
\$var = "$VAR"; # access variable
echo \$var;
EOF
0 голосов
/ 11 июня 2012

Почему бы просто не использовать STDIN:

echo lala.txt | php -r '$line = trim(fgets(STDIN))if(is_file($line)){echo "1";}else{echo "0";}'

...