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 main
    

    Alle 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);
    	}
    

Anmelden zum Antworten