Выполнение bash-скрипта с PHP и ввод команд

1

Я пытаюсь выполнить скрипт bash с использованием PHP, но проблема в том, что сценарий должен иметь некоторые команды и информацию, введенные в процессе выполнения.

Это то, что я использую

$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh');
chdir($old_path);

Сценарий выполняется нормально, но я не могу ввести какой-либо параметр в скрипт.

  • 0
    Сценарий принимает аргументы?
  • 0
    Нет, аргументы в скрипте не принимаются, скрипт запускается и запрашивает ввод, например, ввод имени и множество других вводов
Показать ещё 3 комментария
Теги:
exec

1 ответ

0
Лучший ответ

shell_exec() и exec() не могут запускать интерактивные скрипты. Для этого вам нужна настоящая оболочка. Вот проект, который дает вам настоящую оболочку Bash: https://github.com/merlinthemagic/MTS

//if the script requires root access, change the second argument to "true".
$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', false);

//What string do you expect to show in the terminal just before the first input? Lets say your script simply deletes a file (/tmp/aFile.txt) using "rm". In that case the example would look like this: 

//this command will trigger your script and return once the shell displays "rm: remove regular file"

$shell->exeCmd("/my/path/script.sh", "rm: remove regular file");

//to delete we have to press "y", because the delete command returns to the shell prompt after pressing "y", there is no need for a delimiter.  

$shell->exeCmd("y");

//done

Я уверен, что возвращение скрипта намного сложнее, но приведенный выше пример дает вам модель взаимодействия с оболочкой.

Я также хотел бы упомянуть, что вы можете не использовать сценарий bash для выполнения последовательности событий, а выдавать команды один за другим с помощью метода exeCmd(). Таким образом, вы можете справиться с возвратом и сохранить всю логику ошибок в PHP, а не разделить ее между PHP и BASH.

Прочтите документацию, это поможет вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню