Shellskript aus einem C++ Programm starten



  • junix schrieb:

    äh ja, schön, Fritzi... nur sind wir hier im VCL Forum und haben glücklicherweise den TClientSocket, welcher uns n Haufen von dem WinAPI-Gewusel da abnimmt und die Verwendung von Sockets erheblich erleichtert (o;

    Ja schön, junix. Aber du hast wohl mitbekommen, dass Bountblasher mich darum gebeten hatte, ihm etwas Code zu geben. Wenn nicht, dann lies den Thread nochmal durch. Tut dir gut! Ich habe somit lediglich mein Versprechen eingelöst. Ganz davon abgesehen arbeitet deine tolle Klasse sicher auch mit genau den Funktionen, mit denen ich arbeite. Warum sollte Bountblasher nicht wissen, was wirklich dahinter steckt. Und nochmal außerdem: ich habe diese Klasse nicht, denn ich hab den BCB3.



  • WebFritzi schrieb:

    Aber du hast wohl mitbekommen, dass Bountblasher mich darum gebeten hatte, ihm etwas Code zu geben. Wenn nicht, dann lies den Thread nochmal durch. Tut dir gut!

    danke, brauche keine Leseübungen und ich wüsste nicht wieso sonst mir das gut tun sollte. (:

    WebFritzi schrieb:

    Ganz davon abgesehen arbeitet deine tolle Klasse sicher auch mit genau den Funktionen, mit denen ich arbeite.

    Ich glaube du solltest mein Posting nochmals lesen statt gleich rot zu sehen, nur weil man eine kritische Äusserung macht... täte dir wohl ganz gut.... Ich sagte ausdrücklich dass sie komfortabler im Handling sei. Zu deinem Funktionsset bräuchte man noch einen Thread der die IO-Aufgaben übernimmt um sie effizient einsetzen zu können.

    WebFritzi schrieb:

    Warum sollte Bountblasher nicht wissen, was wirklich dahinter steckt.

    Wer sagt denn sowas? Es geht nur darum, dass in der ersten Phase die Erfolgschancen höher und das Verständnis leichter ist als wenn man gleich aus dem Vollen schöpft... vor Allem dann, wenn man sich auf absolutem neuland bewegt...

    WebFritzi schrieb:

    Und nochmal außerdem: ich habe diese Klasse nicht, denn ich hab den BCB3.

    Tja... Für leute mit dem BCB < 5 (oder 4?) haben wir ja auch noch die Indy-Library die dir auch nicht unbekannt sein dürfte....

    Also spiel hier nicht gleich den beleidigten Webfritzen. War ja kein persönlicher Angriff sondern nur ein Hinweis am Rande...

    -junix



  • junix schrieb:

    Für leute mit dem BCB < 5 (oder 4?) haben wir ja auch noch die Indy-Library die dir auch nicht unbekannt sein dürfte....

    Ne, isse nich. Aber die ist nicht für den BCB3 gedacht, soweit ich mich erinnern kann.

    junix schrieb:

    Also spiel hier nicht gleich den beleidigten Webfritzen. War ja kein persönlicher Angriff sondern nur ein Hinweis am Rande...

    Auch wenn es nicht wie ein "Hinweis am Rande" daherkam... Ich bin nicht beleidigt. Ich habe lediglich meinen Post gerechtfertigt.

    Zum Thread: Wieso? Meinst du nicht, einer reicht? Ich hatte eben an ein Programm für ihn gedacht, dessen Symbol er nur anzuklicken braucht, und schon ist das Skript gestartet. Da braucht's kein Input.



  • WebFritzi schrieb:

    junix schrieb:

    Für leute mit dem BCB < 5 (oder 4?) haben wir ja auch noch die Indy-Library die dir auch nicht unbekannt sein dürfte....

    Ne, isse nich. Aber die ist nicht für den BCB3 gedacht, soweit ich mich erinnern kann.

    Äh die älteren Versionen... (damals hiess sie glaube ich WinShoes...) würden da helfen...

    WebFritzi schrieb:

    Zum Thread: Wieso? Meinst du nicht, einer reicht? Ich hatte eben an ein Programm für ihn gedacht, dessen Symbol er nur anzuklicken braucht, und schon ist das Skript gestartet. Da braucht's kein Input.

    Jo, dann gehts... trotzdem wäre ein Thread eleganter um das UI zu entkoppeln...

    -junix



  • Ich bedank mich für eure Hilfe.
    Es ist immer besser mehrere Möglichkeiten zu kennen...

    Danke!!!



  • Junix ich hab noch mal kurz eine Frage.

    Was bedeudet die Zahl, die man beim connect mit übergeben muss?

    TN1->Connect(1);



  • Falls du mich meinst: bei meiner Indy-Version (9.00.14) erwartet Connect keinen Parameter. Und auch bei der beim BCB6 mitgelieferten Version (ca. 8.0) wird kein Parameter benötigt, wenn ich die entsprechende Hilfedatei richtig lese.



  • Hallo Jansen,

    hab noch mal eine Frage.
    Wie muss ich das machen, das sich mein Programm mit der Unix Maschine verbindet und dann nur den Befehl () ausführt und danach die Verbindung gleich trennt?
    Weil so wie ich es gemacht hab (siehe unten) startet er mein Shellskript 2 mal.
    Kannst du mir bitte Helfen..

    void __fastcall TForm1::TN1DataAvailable(TIdTelnet *Sender,
          const AnsiString Buffer)
    {
    bool logged_in = false;
    bool bEnde     = false;
    String strLogin    = "user";
    String strPass     = "pw";
    String strCommand  = "nohup bin/dvl_bk.sh > log/dvl_bk.log &";
    String strResponse = "";
    String strText = "";
    
     if (Buffer != "")
      {
    
        if (!logged_in)
        {
        ShowMessage("Ja");
          // Loginprompt erreicht
          if (UpperCase(Buffer).Pos("LOGIN: ") == Buffer.Length() - 6)
            strText = strLogin;
          // Passwortprompt erreicht
          else if (UpperCase(Buffer).Pos("PASSWORD: ") == Buffer.Length() - 9)
            strText = strPass;
    
          // Eingabeprompt erreicht, Kommando abschicken
          else if (UpperCase(Buffer).Pos(UpperCase("$ ")) > 0)
          {
            logged_in = true;
            strText = strCommand;
          }
    
          if (UpperCase(Buffer).Pos(UpperCase("Controlling.sh")) > 0) {
             strText = "exit";
          }
        }
            ShowMessage("Befehl: " + strText);
    
        if (strText != "")
        { // das eigentliche Versenden
    
          for (int i = 1; i <= strText.Length(); i++)
    
              TN1->SendCh(strText[i]);
              TN1->SendCh(VK_RETURN);
    
          strText = "";
        }
    
        // Kontrollausgabe
        Memo1->Lines->Add(Buffer);
      }
    
    }
    

    Edit:
    Bitte die Code-Tags benutzen. Danke!



  • Ist die Kontrolle auf den String "Controlling.sh" die Prüfung auf den korrekten Start des Skripts?
    Wenn ja, dann darf die natürlich nicht innerhalb der if (!logged_in)-Klammern stehen, da sie ja nach erfolgreichem Login nie ausgeführt wird.



  • Mir ist aufgefallen, dass mein Programm die bool Variable nicht setzt.
    Hab sie jetzt mal global gemacht, jetzt funktioniert es.
    Mir ist aufgefallen, das nach jeder Eingabe über Telnet mein Programm wider zum Connect zurückspringt. An was kann das liegen?

    Ich hab die Inidi 9.. und Borland 5 und bei mir benötigt mein Connect eine const int.


Anmelden zum Antworten