Shell() und DOS-Variablen Problem



  • Hallo liebe Leute,

    seit einigen Tagen ärgert mich ein Problem, bei dem mir hier sicher jemand helfen kann 😋

    Folgendes:

    Ich möchte mit dem Shell() Befehl ein paar Zeilen in die Konsole schreiben. Ich weiß, dass es keine saubere Sache ist, aber ich brauch die Lösung auf diesem Weg.

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h> 
    main()
    {
    system("set test=Hallo wie geht es Dir?");
    system("echo %test%");
    }
    

    Der Profi wird gleich feststellen, dass ich keiner bin, aber das macht nix 😃

    würde ich die im Quelltext verwendeten Zeilen in eine DOS box eingeben, würde der Satz "Hallo wie geht es Dir?" ausgegeben, bei meinem Programm kommt aber nur %test% heraus.

    Vermutlich werden da irgendwelche anderen Instanzen verwendet und ich hab nicht die geringste Ahnung, wie ich das so zum laufen bekommen könnte.

    Ich hoffe mir kann jemand helfen.

    Vielen, vielen Dank im Voraus! 🙂

    Kevin



  • #include <stdlib.h>
    
    int main (int c, char **v)
    {
        putenv("test=BlaBla");
        system("echo %test%"); return 0;
    }
    

    Warum das so ist, kriegst du schon noch heraus.



  • Vielen Dank für diesen Vorschlag. Hat mich ein ganzes Stück weitergebracht 🙂

    Kennst Du noch mehr Befehle, die mit "System" interagieren? Bzw. gibt es irgendwo was zum Nachlesen zu dem Thema?



  • Das interagiert gar nicht.
    Die Umgebungsvariablen werden von jedem Prozess an seine Kinder vererbt (zumindest auf den üblichen Betriebsystemen). system() startet aber jedesmal einen neuen Kindprozess (und zwar gleich eine ganze Shell), wobei es logisch ist, daß du dann keine U-Variablen übergeben kannst, weil die Prozesse nicht geradlinig verwandt sind.

    Nachlesen würde ich im POSIX-Standard, weil (wenn mich nicht alles täuscht) putenv() gar nicht im ANSI-Standard vorkommt. Ist aber überall vorhandnen.

    gibt es irgendwo was zum Nachlesen zu dem Thema?

    Versuch's einmal mit man: putenv, und schau, wie weit du von dort kommst. (die man-Tags sind toll!)

    PS:
    Natürlich muss es eine globale Liste von U-Variablen geben, die für jeden Prozess übernommen werden (oder so ähnlich, Details egal). Und genau dorthin schreibst du mit putenv().

    PPS:
    Oder trägt man mit putenv() nur in die Liste des aktiven Prozesses ein? Keine Ahnung -- musst du selbst herausfinden...


Log in to reply