Пользовательская оболочка не распознает последнюю переданную ей команду - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь реализовать пользовательскую оболочку Unix, однако последняя передаваемая ей команда никогда не распознается. Когда я запускаю «ls», ничего не происходит, но если я делаю «ls ls», он действует так, как будто пропущен только один ls, или если я делаю «ls -o», он делает только «ls», но если я делаю «ls -» o -o "он делает" ls -o ", он должен функционировать аналогично стандартной оболочке Unix.

#include "apue.h"
#include <sys/wait.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int parse(char* buf, char **cmds);
static void sig_int(int);       
int
main(void)
{


    char *path;
        path = getenv("PATH");
    char    buf[MAXLINE];   
     char *envp[] = {path, NULL};
    pid_t   pid;
    int     status;
    char *command[MAXLINE];
    char *input; 
    if (signal(SIGINT, sig_int) == SIG_ERR)
        err_sys("signal error");
    printf("%% "); 
    while (fgets(buf, MAXLINE, stdin) != NULL) {
            parse(buf, command);





        if ((pid = fork()) < 0) {
            err_sys("fork error");
        } else if (pid == 0) {      /* child */

            input = command[0];
            execvpe(input, command, envp);
            err_ret("couldn't execute: %s", buf);
            exit(127);
        }

        /* parent */
        if ((pid = waitpid(pid, &status, 0)) < 0)
            err_sys("waitpid error");
        printf("%% ");

            }
    exit(0);

}

/*parses input into something runable*/
int parse(char* buf, char **cmds)
{
    char *sep;
    int count;
    count = 0;
    while((sep = strchr(buf, ' ')))
    {
        cmds[count]= buf;
        *sep = '\0';
        buf = sep +1;
        count++;
        while (*buf && (*buf == ' ')) /* Ignore spaces */
                    buf++;
    }
    cmds[count] = NULL;
    if(count == 0)
        return 1;
    return 0;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...