未能从PHP发送命令到TMUX会话

我有一个运行一个Minecraft服务器的TMUX会话,我正在为服务器创build一个Web界面。

目前我有以下文件:

command.sh

#!/bin/bash tmux send-keys -t minecraft Cz "$@" Enter 

的index.php

 <?PHP if($_POST) { $commandString = $_POST['inputCommand']; $output = shell_exec('./command.sh $commandString'); echo "<pre>$output</pre>"; } ?> <form method="post"> <input type="text" name="inputCommand" placeholder="Type Command"/> <input type="submit" value="Execute" /> </form> 

command.sh在terminal中工作,我可以使用所有的标准命令

  ./command.sh "/help" 

但是我不能使用上面的方法从php执行这个脚本。 我已经将www-data和www-user都添加到了sudoers中,并尝试过

shell_exec('sudo ./command.sh $commandString')

但是,这也没有奏效。

当点击提交button时,输出被回显,但是是空白的。

有人可以帮忙指出我的脚本执行方法出错了吗?


编辑我已经采取了两个截图,之前和之后进一步澄清。

在这里输入图像描述

command.sh有问题,并输出一些东西给stderr。 shell_exec只返回给你的标准输出,所以你没有看到错误。 尝试将“2>&1”附加到命令的末尾,例如

 $output = shell_exec('./command.sh $commandString 2>&1'); 

这将发送stderr到标准输出,让你看看发生了什么。 调试问题后,请删除“2>&1”。 正如在评论中指出的那样,我想实际的问题是你使用单引号,这意味着$ commandString被逐字解释。 试试双引号!

警告!!! 这真的不安全。 您将从POST获取的unsanitized参数传递给以sudoers中的用户身份运行的命令。 无论两个登录屏幕,你应该消毒你的输入。