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.
2
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..
- wyświetlasz tekst zachęty
- Odczytujesz linie tekstu jakąś funkcją.
- 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()
- 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