Я пытаюсь выполнить скрипт bash с использованием PHP, но проблема в том, что сценарий должен иметь некоторые команды и информацию, введенные в процессе выполнения.
Это то, что я использую
$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh');
chdir($old_path);
Сценарий выполняется нормально, но я не могу ввести какой-либо параметр в скрипт.
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.
Прочтите документацию, это поможет вам.