Doppelte Ausgabe der Working Directory bei der Nichtschließung des Programms (Shell)



  • Ich bin gerade dabei eine kleíne shell zu entwickeln, der immer vor der Eingabe die Current Working Directory ausgibt. Mit dem Befehl "exit" kann der Nutzer die Shell verlassen. Vorher sollte ihm aber gefragt werden, ob er denn wirklich die Shell verlassen möchte, woraus er mit 'y' bestätigen, oder mit 'n' weiter in der Shell bleibt. Mit 'y' kann ich die Shell verlassen, d.h. es funktioniert, aber wenn ich mit 'n' antworte gibt die Shell mir in der nächsten Zeile die CWD doppelt aus. Was mache ich falsch?

    int main(int argc, char * argv[]){  
    
        char cwd[256]; char input[256]; 
        char *command;  
    
        while(1) {     
    
            //return user-info and current working directory 
            getcwd(cwd, sizeof(cwd));     
             printf("%s@kleineShell:%s$ ", getpwuid(getuid())->pw_name, cwd);      
    
            fgets(input, 256, stdin);     
            command = strchr(input, '\n');      
    
            if(command){         
                *command = '\0';
            }      
    
            if(strncmp(input, "exit",4)==0){         
                cout << "Do you want to quit (y/n) ?" << endl;          
                string isExit = "";         
                cin >> isExit;          
                if(isExit == "y"){             
                    exit(0);         
                }         
                continue;     
            }  
        }   
        return 0;
    }
    


  • Warum vermischt du C und C++?

    So könnte es richtig aussehen. Nicht viel geändert, sondern nur C++ verwendet.

    #include <iostream>
    #include <string>
    #include <unistd.h>
    #include <sys/types.h>
    #include <pwd.h>
    
    using namespace std;
    int main(int argc, char * argv[]){  
    
        char cwd[256];
        string CWD;
        string input; 
        
        while(1) {     
    
            //return user-info and current working directory 
            getcwd(cwd, 256);     
            CWD = string(cwd);
            string username = "";
            if (getpwuid(getuid()))
                username = string(getpwuid(getuid())->pw_name);
            cout << username << " @kleineShell: "<< CWD;      
    
            cin >> input;
            if(input ==  "exit"){         
                cout << "Do you want to quit (y/n) ?" << endl;          
                string isExit = "";         
                cin >> isExit;          
                if(isExit == "y"){             
                    exit(0);         
                }         
                continue;
                
            }  
        }   
        return 0;
    }
    




  • @Swordfish
    Ich weiß. Nur was hilft es komplett abgespaced Code zu präsentieren, denn der Fragensteller 0,0 versteht...



  • @thenimo lass dir mal in Zeile 14 deine Eingabe nochmal ausgeben.

    etwa cout << "Your Input <" << command << ">";

    Wenn ein '\n' in der Eingabe ist, sollt das > in der nächsten Zeile erscheinen.

    Your Input <exit
    >
    

  • Banned

    This post is deleted!

Log in to reply