shell_exec() und exec() können keine interaktiven Skripts ausführen. Dafür brauchst du eine echte Shell. Hier ist ein Projekt, das Sie eine echte Bash Shell gibt: 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
Ich bin sicher, dass die Rückkehr des Skripts ist weitaus komplexer, aber das Beispiel oben gibt Ihnen ein Modell dafür, wie mit der Schale zu interagieren.
Ich würde auch erwähnen, dass Sie möglicherweise nicht ein Bash-Skript verwenden, um eine Sequenz von Ereignissen durchzuführen, sondern geben Sie die Befehle nacheinander mit der Methode exeCmd(). Auf diese Weise können Sie mit der Rückgabe umgehen und die gesamte Fehlerlogik in PHP beibehalten, anstatt sie zwischen PHP und BASH aufzuteilen.
Lesen Sie die Dokumentation, es wird Ihnen helfen.
Akzeptiert das Skript Argumente? – segFault
Nein, Argumente werden für das Skript nicht akzeptiert, das Skript läuft und fragt nach einer Eingabe wie, geben Sie den Namen und für viele andere Eingaben ein –
Mögliches Duplikat von [PHP, shell \ _exec und einer Eingabe] (http://stackoverflow.com/questions/11737251/php-shell-exec-and-an-input) –