Ankündigung

Einklappen
Keine Ankündigung bisher.

shell_exec im Zusammenspiel mit "Untershell"

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • shell_exec im Zusammenspiel mit "Untershell"

    Hallo liebe Mitglieder,

    seit einer Stunde google ich mir die finger wund - vermutlich scheitert es am richtigen Suchbegriff.

    Problem: Ich möchte mit PHP die Shell steuern - funktioniert grundsätzlich ja ganz gut, via shell_exec.
    Allerdings ist es in meinem Fall nicht mit nur einem Befehl getan, sondern (ich beschreibe mal die Konsolensicht) nach dem ersten Befehl öffnet sich eine "Untershell" (ich weiß nicht wie man dazu sagt) und dort müsste dann das zweite Kommando eingegeben werden.
    Im Anhang habe ich einen Screenshot gemacht, wie es auf der Shell ausschaut.

    Ich habe schon versucht zuerst
    PHP-Code:
    shell_exec("sudo ./armphone ./armphone.conf");
    shell_exec("dial 30"); 
    Leider führt das nicht zum Ergebnis, ich vermute der zweite Befehl wird in einer eigenen Instanz ausgeführt und nicht in der Untershell.
    Auch pipen habe ich schon probiert, geht aber auch nicht.

    Hat jemand eine Idee?

    Herzlichen Dank und ein schönes Wochenende

    Willi









  • #2
    http://php.net/manual/en/function.proc-open.php

    Kommentar


    • #3
      Vielen, vielen Dank
      Leider komme ich noch nicht ganz klar mit dem Befehl, folgende zwei Varianten habe ich schon probiert:

      PHP-Code:
      $descriptorspec = array(
         
      => array("pipe""r"),  // stdin is a pipe that the child will read from
         
      => array("pipe""w"),  // stdout is a pipe that the child will write to
      );    
      $process proc_open('bash'$descriptorspec$pipes);

      if (
      is_resource($process)) {
          echo 
      "PROZESS";
          
      fwrite($pipes[0], 'sudo ./armphone ./armphone.conf' PHP_EOL);
          
      fwrite($pipes[0], 'dial 97' PHP_EOL);
          
      fclose($pipes[0]);

          echo 
      stream_get_contents($pipes[1]);
          
      fclose($pipes[1]);

          
      proc_close($process);
      }
      else {
          echo 
      "KEIN PROZESS";

      PHP-Code:
      $descriptorspec = array(
         
      => array("pipe""r"),  // stdin is a pipe that the child will read from
         
      => array("pipe""w"),  // stdout is a pipe that the child will write to
      );    
      $process proc_open('sudo ./armphone ./armphone.conf'$descriptorspec$pipes);

      if (
      is_resource($process)) {
          echo 
      "PROZESS";
          
      fwrite($pipes[0], 'dial 97' PHP_EOL);
          
      fclose($pipes[0]);

          echo 
      stream_get_contents($pipes[1]);
          
      fclose($pipes[1]);

          
      proc_close($process);
      }
      else {
          echo 
      "KEIN PROZESS";

      Ich erhalte immer "KEIN PROZESS" - er erkennt mein proc_open nicht als Ressource??

      Besten Dank nochmal
      Willi

      Kommentar


      • #4
        Sollte funktionieren. Kannst du mal die Parameter $cwd und $env bei proc_open mit angeben, damit der Befehl im richtigen Verzeichnis gestartet wird und evtl. noch entsprechende Umgebungsvariablen?

        Kommentar


        • #5
          Hmm... komisch.

          Habe ich auch probiert:

          PHP-Code:
          $descriptorspec = array(
             
          => array("pipe""r"),  // stdin is a pipe that the child will read from
             
          => array("pipe""w"),  // stdout is a pipe that the child will write to
             
          => array("file""error.txt""a"// stderr is a file to write to
          );    

          $cwd '/home/pi';
          $env = array('some_option' => 'aeiou');

          $process proc_open('nano'$descriptorspec$pipes$cwd$env);

          if (
          is_resource($process)) {
              echo 
          "PROZESS";
             
          // weiteres
          }
          else {
              echo 
          "KEIN PROZESS";

          Ich komme immer auf "KEIN PROZESS"...

          Besten Dank nochmal
          Willi



          Kommentar

          Lädt...
          X