Не удалось отправить команды на сеанс TMUX из PHP

У меня есть сеанс TMUX с сервером minecraft, и я создаю веб-интерфейс для сервера.

В настоящее время у меня есть следующие документы:

command.sh

 #!/bin/bash
 tmux send-keys -t minecraft C-z "[email protected]" 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 работает в терминале, так что я могу использовать все стандартные команды способом

 ./command.sh "/help"

Однако я не могу выполнить этот script с php, используя указанную выше методологию. Я добавил как www-data, так и www-user в sudoers и попытался

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

Но это тоже не сработало.

Когда нажата кнопка отправки, вывод будет эхом, но он пуст.

Может кто-то может помочь, указав, где моя методология для выполнения script пошла не так?


ИЗМЕНИТЬ Я сделал два скриншота, один до и один раз, чтобы уточнить.

enter image description here

Ответ 1

command.sh имеет проблему и выводит что-то в stderr. shell_exec возвращает только вам stdout, поэтому вы не видите ошибку. Попробуйте добавить "2 > & 1" в конец вашей команды, например

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

Это отправит stderr в stdout и позволит вам увидеть, что происходит. Удалите "2 > & 1" после отладки проблемы. Как отмечалось в комментариях, я полагаю, что фактическая проблема заключается в том, что вы используете одинарные кавычки, что означает, что $commandString интерпретируется буквально. Вместо этого используйте двойные кавычки.

Предупреждение!!! Это действительно небезопасно. Вы передаете несаминированный параметр, полученный из POST, в команду, запущенную как пользователь, которая в sudoers. Независимо от двух экранов входа, вы должны дезинформировать свой вход.