Własny shell

2

Witam. Mam do napisania własny shell działający razem z parametrami. Tzn wyświetla prompt '>' po czym po wpisaniu wykonuje dane polecenie np ls -l itp. Chciałbym prosić o wyjaśnienie mi jak mam się do tego zabrać bo za bardzo nie wiem.

0

Ogólnie i najprościej? (pseudokod)

interface CommandHandler {
    void doCommand(Vector<string> commandTokens) {
    }
}

class LsCommandHandler implements  CommandHandler  {
    void doCommand(Vector<string> commandTokens) {
        // obsluga ls
    }
}

class RmCommandHandler implements  CommandHandler  {
    void doCommand(Vector<string> commandTokens) {
        // obsluga rm
    }
}

vector<String> convertToTokens(String input) {
// zamienia np   "ls -l"  na dwa stringi   "ls", "-l"
}

main() {
    koniec = false;

    map<String, CommandHandler > regCommand;
    regCommand.put("ls", new LsCommandHandler);
    regCommand.put("rm", new RmCommandHandler);

    While (!koniec) {
        command = readLine(input);
        Vector<string> commandTokens = convertToTokens(command);   
 
        // pierwszy string = nazwa komendy
        if (commandTokens.length > 0) { 
            CommandHandler commandH = regCommand.get(commandTokens[0]);
            if  (commandH != null) { 
                  commandH.doCommand(commandTokens);
            }
            else if (commandTokens[0] == "quit") {
                  koniec = true;
            }
            
        }
    
   }
}
0

No ok, ale ten pseudokod chyba mówi wystarczająco ... To inaczej..

  1. wyświetlasz tekst zachęty
  2. Odczytujesz linie tekstu jakąś funkcją.
  3. Jeżeli chcesz użyć exec to, sprawdź najpierw czy wpisany tekst nie jest np równy "koniec" jeżeli jest to wyjdź z programu. W innym przypadku po prostu pchnij to co własnie wczytałeś do funkcji exec()
  4. Skocz do 1 (petla)

Co chcesz jeszcze wiedzieć?

0

Oznacza tylko tyle że jeżeli nie wyszedłeś jeszcze z programu (jest taka możliwość w pkt 3) to powtórz wszystkie operacje (1-3). Klasyczna pętla np while jak w pseudokodzie.

0

do wczytywania poleceń polecam bibliotekę readline

1 użytkowników online, w tym zalogowanych: 0, gości: 1