对execvp的命令无效后,命令和结果打印两次

时间:2019-06-19 08:37:18

标签: c unix

我正在尝试创建类似shell的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

打印以下所有命令并输出两次。

在不存在命令的情况下,它与恐怖有关吗?它适用于带有无效参数的现有命令。

谢谢!

0 个答案:

没有答案