2011-05-09 50 views
2

我想在bash和php脚本中传递变量。我知道在php中有2个文件和$ argv是可能的,但我真的想把这个脚本放在1个文件中。这是我现在得到的:bash和php-cli之间的变量

#!/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解析错误:语法错误,意想不到的“=”在 - 线3

我得到同样的错误,如果我甚至尝试定义类似$ VAR基本变量= “你好”;

回答

1

如果防止外壳解释PHP脚本,引用分隔符为你在这里DOC:

/usr/bin/php << 'EOF' 
<?php $var = getenv("VAR"); echo $var; ?> 
EOF 
+0

是的,我认为THI s是最简单的解决方案。谢谢! – user745595 2011-05-11 13:20:13

4

你的问题是bash和php都使用美元符号来表示变量。当你说这在定界符:

$var = getenv("VAR"); 

庆典试图用shell变量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 

一个bash定界符评估的变量,就像一个双引号的字符串。

1

你已经遇到了一个你想要解决的问题,就是把两个脚本放在一个文件中,一个用于Bash,另一个用于PHP。问题在于shell解释了$var,使PHP在= getenv("VAR");的地方出现语句错误,因此语法错误。

另一件事是,只要将两个脚本保存在一个文件中(我认为这是一个糟糕的主意),您无需从env中取出VAR。

这里是你如何把它(未测试):

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

为什么简单不使用STDIN

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