Konsolen Shell mit Parametereingaben...
-
Hallo ich hab bisher ein Konsolenprogramm programmiert bei denen alle Befehle fest in der exe Datei integriert sind. Das negative dabei ist, dass die Datei immer größer wird. Jetzt möchte ich lieber alle Funktionen aus der Konsole in kleine programme splitten, wie z.B. bei "cygwin" da ist ja die bash also die shell und im ordner "bin" sind alle programme. Mit meiner Konsole will ich auch eine art bash erstellen. Hier ist mein bisheriger Eingabe Code zum einlesen von Befehlen:
//... int main() { //... string str; //Eingabe String do { //Befehl mit Parameter einlesen getline(cin, str); istringstream cmdline (str); string input; vector<string> params; if (cmdline >> input) { string tmp; while (cmdline >> tmp) { params.push_back (tmp); } /* -------------------------------------- Eingelesene Befehle... -------------------------------------- */ if(input == "help") { help(); } //----------------------------- else if(input == "test") { test(); } //weitere Befehle... }//ENDE do schleife }//ENDE mainAlle Funktionen waren fester Bestandteil der Konsole. Nun hab ich meine Programme im Unterordner "bin". Hier meine neue Eingabe:
//... string str; //Eingabe String do { //Befehl mit Parameter einlesen getline(cin, str); istringstream cmdline (str); string input; vector<string> params; if (cmdline >> input) { string tmp; while (cmdline >> tmp) { params.push_back (tmp); } /* -------------------------------------- Eingelesene Befehle... -------------------------------------- */ string src; src += '"'; src += get.ApplicationDirectory() + "bin\\"; //ermittelt den programmpfad und erstellt dann mit bin den pfad zu den programmen src += input; src += '"'; cout << "Befehl: " << src << endl; exec(src); //Übergibt den Befehl an system()Das mit den "" muss sein, da cmd meckert wenn kein vollständiger pfad steht.
So leute mein problem ist folgender, sobald ich z.b. ein befehl mit parameter übergebe kommen diese nicht an. Könnt ihr mir bitte helfen wie ich diese mit einbaun soll.
-
string src; src += '"'; src += get.ApplicationDirectory() + "bin\\"; //ermittelt den programmpfad und erstellt dann mit bin den pfad zu den programmen src += input; src += '"';da kommt ja dann sowas hier raus:
"dir c:\*"ja und das wird dann natürlich als 1 command angesehen und z.B. net
gefunden
also mmn. liegt an den "" !
Das mit den "" muss sein, da cmd meckert wenn kein vollständiger pfad steht.was meinst du damit genau?
-
Habs hinbekommen mit den Parametern:
string src; src += '"'; src += get.ApplicationDirectory() + "bin\\"; src += input; src += '"'; //Ausführung mit Parameter if(params.size() >= 1) { string cmd; for(int i=0; i <= params.size()-1; i++) { cmd += params[i] + " "; } src += " "; src += cmd; exec(src); } //Ausführung ohne Parameter else { exec(src); }