【问题标题】:passing a variable from php to bash将变量从 php 传递给 bash
【发布时间】:2013-10-27 22:41:37
【问题描述】:

我似乎无法从 php 获取传递给我的 bash 脚本的变量。无论我尝试什么,$uaddress 和 $uppassword 都是空的。

********************* 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: > " 

【问题讨论】:

    标签: php linux bash ssh


    【解决方案1】:

    您需要将变量作为参数传递给 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 谢谢。我也忘了把字符串的单引号改成双引号,这样插值就可以了。
    • @Barmar 不先生,$useraddress = escapeshellarg($useraddress);给出一个未定义的变量,而 escapeshellarg('$useraddress') 实际上将传递给 BASH,但作为一个字符串。 paste.ee/p/arOIFbpaste.net/show/141824
    • 对不起,我看错了你的变量名。我已经更新了我的答案。
    • @Barmar 但这是我朋友的问题。我需要一个变量,而不是静态数据。该项目每次都会更改。传递静态数据很好,但动态数据就很糟糕了。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      相关资源
      最近更新 更多