当我运行client.sh脚本时,没有输出。当我在php中使用“system”命令时,client.sh脚本在无限循环中运行。
Server.sh: 代码:
#!/bin/bash
while :
do
printf "Do you want to continue:[Y/N]\n"
read ans
case $ans in
"Y")continue;;
"N")echo "Thank you"
exit 0;;
"*")echo "Wrong choice"
continue;;
esac
done
输出:
srikanth@localhost:~/www/phpshell$ ./scm.sh
Do you want to continue:[Y/N]
Y
Do you want to continue:[Y/N]
N
Thank you
Calls.php: 代码:
<?php
$cmd="/home/srikanth/phptest/server.sh";
pcntl_exec($cmd);
?>
输出:
srikanth@localhost:~/phptest$ php calls.php
Do you want to continue:[Y/N]
Y
Do you want to continue:[Y/N]
N
Thank you
Client.sh 代码:
#!/bin/bash
curl http://cxps103/svnadmin/calls.php
输出:
srikanth@localhost:~/phptest$ ./client.sh
任何建议都会有很大帮助。谢谢。
更新
根据Ibu的建议我简化了我的问题,我遇到了问题,我的server.sh
脚本中有一个while循环导致问题,
答案 0 :(得分:1)
当CGI脚本(server.sh
)运行时,其标准输入未连接到任何内容。因此,read
命令始终将ans
设置为空值,该值与case
语句中的任何备选项都不匹配,并且脚本将永远循环。
正如wimvds和其他人所说,你的方法根本就是错误的。 CGI脚本生成要在浏览器中显示的HTML页面。它基于客户端请求。一旦脚本有了它的参数,它就不会从任何地方获得输入(除非它打开服务器上的文件)。 Web应用程序的交互包括用户在表单中输入数据并按下提交按钮。 Unix交互(例如在stdin上输入输入和在stdout上查看输出)不能通过HTTP工作。
除此之外:"*")
案例仅匹配由单个*
字符组成的行。你可能意味着*)
,意思是匹配任何东西。