我正在尝试来回传递参数,从shell传递给PHP,然后又传回来。在我的简单测试中,我很容易从shell转换为PHP,但没有运气让字符串退出。我已经尝试过escapeshellarg和escapeshellcmd,但都没有工作。
壳牌
#!/bin/sh
# set a date and time variables, in the form of YYYY-MM-DD and HH:MM:SS
dateVar=`date +%Y-%m-%d`
timeVar=`date +%H_%M`
# Launching PHP
runPHP=`which php`
$runPHP calledPHP.php $timeVar $dateVar
# Returned from PHP
passTime=$1
echo "$passTime"
passDate=$2
echo "$passDate"
PHP
<?php
setlocale(LC_CTYPE, "en_US.UTF-8");
echo "PHP called.\n";
$logTime = $argv[1]."\n";
// echo $logTime;
$logDate = $argv[2]."\n";
// echo $logDate;
$passTime = escapeshellarg('Time: $logTime');
$passDate = escapeshellarg('Date: '.$logDate);
?>
运行shell,它回来的唯一回应是'PHP调用'。如您所见,我在最后两个php变量中尝试了两种不同的语法。似乎都没有用。这有更好的功能吗?或者,我只是使用了错误的语法?
提前感谢任何建议
答案 0 :(得分:1)
在PHP脚本中,您需要echo
任何您希望shell脚本作为“返回值”获取的内容。请记住,虽然你没有真正归还任何东西。你打印到stdout。
然后,您必须使用someVariable=$(ExecuteScriptThatOutputsStdOut)
将该stdOut捕获到shell脚本中的变量中。
以下是类似的问题/答案:redirect command output into variable and standard output in ksh
这是您修改的代码,用于获取/打印PHP脚本的输出。 你可能还想要改变其他一些奇怪的东西,尽管这是一个单独的问题。 (在php中的赋值结束处的换行符,转义带有硬编码标签的shell args。)
如果你想分开日期和时间,你要么必须调用两个单独的php脚本,要么在shell脚本中,你必须解析PHP脚本的输出并将结果分成两个变量
Shell脚本
#!/bin/sh
# set a date and time variables, in the form of YYYY-MM-DD and HH:MM:SS
dateVar=`date +%Y-%m-%d`
timeVar=`date +%H_%M`
# Launching PHP
runPHP=`which php`
phpResult=$($runPHP calledPHP.php $timeVar $dateVar)
# Returned from PHP
echo "The php result is: $phpResult"
PHP
<?php
setlocale(LC_CTYPE, "en_US.UTF-8");
//echo "PHP called.\n";
$logTime = $argv[1]."\n";
// echo $logTime;
$logDate = $argv[2]."\n";
// echo $logDate;
$passTime = escapeshellarg("Time: $logTime");
$passDate = escapeshellarg("Date: $logDate");
echo "$passTime, $passDate";
?>
答案 1 :(得分:0)
当shell脚本调用外部程序时,它唯一可以捕获的是程序的输出。当程序的进程退出时,程序的状态(环境,变量等)都会消失。
您必须安排将PHP脚本发送到stdout(即echo
它),shell脚本将解析输出(通常使用read
命令)