从PHP传递变量到Bash

3

我似乎无法从php将变量传递到我的bash脚本中。无论我尝试什么,$uaddress和$upassword都为空。

********************* bash****************

#!/bin/bash -x
useraddress=$uaddress
upassword=$upassword
ssh -p 222 -6 2400:8900::f03c:91f:fe69:8af "/var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add" $useraddress --password $upassword --password2 $upassword  .ssh

********** php ****************

<?php
$upassword = 'test1234'; $uaddress = 'mytestuser@tpccmedia.com';
$addr = shell_exec('sudo /home/tpccmedia/cgi-bin/member_add_postfixadmin 2>&1'); echo $uaddress; echo $upassword;
//$addr = shell_exec('ssh -p 222 -6 2400:8900::f03c:91f:fe69:8af /var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add; echo $useraddress; --password; echo $upassword; --password2; echo $upassword; .ssh');
echo "<pre>$addr</pre>";
var_dump($addr);
?>

***********输出和调试************

mytestuser@tpccmedia.comtest1234

+ useraddress=
+ upassword=
+ ssh -p 2222 -6 2400:8900::f03c:91ff:fe69:8aaf '/var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add' --password --password2 .ssh

Welcome to Postfixadmin-CLI v0.2
---------------------------------------------------------------
Path: /var/www/localhost/htdocs/postfixadmin
---------------------------------------------------------------

Username:  
> 

string(404) "+ useraddress= + upassword= + ssh -p 2222 -6 2400:8900::f03c:91ff:fe69:8aaf '/var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add' --password --password2 .ssh Welcome to Postfixadmin-CLI v0.2 --------------------------------------------------------------- Path: /var/www/localhost/htdocs/postfixadmin --------------------------------------------------------------- Username: > " 
2个回答

8

您需要将变量作为参数传递给shell脚本,shell脚本必须读取其参数。

因此,在PHP中:

$useraddress = escapeshellarg('mytestuser@tpccmedia.com');
$upassword = escapeshellarg('test1234');
$addr = shell_exec("sudo /home/tpccmedia/cgi-bin/member_add_postfixadmin $useraddress $upassword 2>&1");

在shell脚本中:

useraddress=$1
upassword=$2

您肯定也想使用 escapeshellarg 转义参数,特别是密码字段可能包含特殊字符。 - tangrs
@tangrs 谢谢。我还忘记将字符串的单引号改为双引号,这样插值才能正常工作。 - Barmar
@Barmar 不先生,$useraddress = escapeshellarg($useraddress); 会导致未定义的变量错误,而escapeshellarg('$useraddress') 实际上将以字符串形式传递给BASH。http://paste.ee/p/arOIF http://bpaste.net/show/141824/ - brad
@Barmar 但这就是问题所在,我的朋友。我需要一个变量,而不是静态数据。那个项目每次都会更改。传递静态数据是可以的,但动态数据会出错。 - brad
来吧,自己写点代码。你不必完全复制我的代码。理解它在做什么,并将其应用到你的需求中。 - Barmar
显示剩余2条评论

2
明白了。
<?php
$upassword = 'test1234'; $uaddress = 'mytestuser@tpcmedia.com';
$uaddress = escapeshellarg($uaddress);
$upassword = escapeshellarg($upassword);
$addr = shell_exec("sudo /home/tpcmedia/cgi-bin/member_add_postfixadmin $uaddress $upassword 2>&1");
?>


#!/bin/bash -x
uaddress=$1
upassword=$2
ssh -p 2222 -6 2400:8900::f03c:91ff:fe69:8aaf "/var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add" $uaddress --password $upassword --password2 $upassword

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接