Команды и результаты выводятся дважды после неверной команды execvp - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь создать подобный оболочке код c. Он читает из заданного файла каждой строкой, разбивает его на токен команды, создает argv и запускает execvp. Однако есть одна проблема. Всякий раз, когда я помещаю недопустимую команду, она печатает все нижеуказанные команды и выводит их дважды.

Например, если написано

catdf
echo one
echo onetwo

Распечатывает

catdf: No such file or directory
echo one
one
echo onetwo
onetwo
echo one
one
echo onetwo
onetwo

это не то, что я желаю. (Я хочу, чтобы каждая командная строка и вывод выводились только один раз)

Я предполагаю, что причиной ошибки является fork.

После вилки у ребенка я использовал

execvp(argv[0], argv);
perror(argv[0]);
exit(EXIT_FAILURE);

В родительском я использовал

while ((iPid=wait(&status))>0){
    if (status!=0)
        break; /*for current command line*/
}

Этот код хорошо работает для ошибок, таких как

cat nonexistingfile

Но для

nonexistingcommand

печатает все нижеуказанные команды и выводит дважды.

Это как-то связано с perror в этом случае не существующей команды? Это работает для существующей команды с недопустимыми аргументами.

Спасибо!

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