/* mush.c * a Minimally Usable SHell * by Douglas Jones */ #include #include # char command[100]; char *argv[100]; void getcommand() { char ch; int i = 0; putchar( '>' ); do { ch = getchar(); command[i] = ch; i++; } while (ch != '\n'); command[i - 1] = '\000'; } void parseargv() { int i = 0; int j = 0; for (;;) { while (command[j] == ' ') j++; if (command[j] == '\000') break; argv[i] = &command[j]; i++; while ((command[j] != ' ') && (command[j] != '\000')) { j++; } if (command[j] == '\000') break; command[j] = '\000'; j++; } argv[i] = NULL; } void launch() { if (fork() == 0) { /*child*/ execve( argv[0], argv, NULL ); printf( "no such command\n" ); exit( EXIT_FAILURE ); } else { /*parent*/ wait( NULL ); } } main(){ for (;;) { getcommand(); parseargv(); launch(); } }