运行带有来自php的subshel​​l命令的bash脚本

时间:2015-01-29 02:52:28

标签: php bash shell-exec subshell

我试图通过php shell_execute(" $ command")尝试在bash中执行子脚本,其内容如下所示。

$command=$_GET['command'];
$op2=shell_exec("$command");
echo "Command $command output is <pre>  $op2 </pre>";

提交时我得到了

Command /path/to/childscript some_pattern 20 username test output is BLANK

基本上我的孩子脚本创建一个触摸文件,然后发送邮件,然后睡觉,然后再次发送电子邮件,然后发送触摸文件

hour=`date +%T`
pattern=$1
stime=$2
user=$3
reason=$4
    touch ${sdir}/s.${pattern} 
    echo -e "Snooze activated ! \n Sending mail, please wait." 
    echo "Snooze started at: $hour for pattern= $pattern by $user for $stime seconds, reason = $4" | mutt a@b.com -s "active" 
    ( echo -e "Snooze was started at: $hour on pattern = $pattern by $user for $stime seconds, buffered contents are below:\n " >> ${sdir}buffer.${pattern} && sleep $stime && rm -rf ${sdir}s.${pattern} && mutt a@b.com -s "Snooze expire" < ${sdir}/buffer.${pattern} && rm -rf ${sdir}/buffer.${pattern})&

因为我的输出变得空白。我尝试通过制作更清晰的父触发器脚本来运行此脚本

cat trigger
bash /path/to/childscript some_pattern 20 username testing &
echo "done"

我只是在提交时调用此触发器脚本,这给了我一些进展

 Command /path/to/trigger output is
  done
Snooze activated ! 
 Sending mail, please wait.

这次我收到了一封电子邮件。这意味着我的子脚本被调用,但我的命令里面()没有被执行。最后一个命令写的原因是我需要确保所有这些命令只按顺序发生。这肯定是一些子shell /背景问题,但我仍然坚持如何使整个脚本工作。另外我想直接运行子脚本而不是调用触发器,而触发器又调用子进程。

我的表单代码,虽然看起来很好,但如下所示

<div id= "test" >
<form action="/path/to/test.php" >
<form method="post" action="" >
<b>Execute command:</b><br>
<input type="text" name="command">
<input type="submit" value="enter">
<br><br>
</form>
</div>

我对web devl非常陌生并且已经被警告过,如果有人执行一些随机命令,这可能是致命的。我同意,但只有获得授权的人才能访问此页面。如果这不可能,那么通过适当的检查运行此脚本的方法也是如此。

0 个答案:

没有答案