execvp() 是否考虑逻辑运算符?

execvp() 是否考虑逻辑运算符?

在我的课堂作业中,我应该制作自己的命令 shell。在 shell 中,我应该让它接受各种命令行参数,包括逻辑运算符,例如&&||。我最初假设我必须对 shell 进行编程,使其按照逻辑运行,这样如果第一个命令被执行,只有当我想通过使用 execvp() 调用它来使其全部工作时,第二个命令才会继续。然而,我意识到 execp() 第二个参数可能说明了&&连接器,我可以简单地将它作为参数。如果我输入execvp("./shell", "echo hello && mkdir testing")它会考虑逻辑运算符&&吗?

答案1

这些exec*()调用只是启动一个程序并将命令行参数传递给它。底层系统调用不知道参数的含义,这取决于启动的进程。

您可以用来exec*()运行 POSIX 兼容的 shell,并将命令行传递给它,例如使用execl("/bin/sh", "/bin/sh", "-c", "echo hello && mkdir testing", (char *) NULL).mkdir仅当成功时shell 才会运行该命令echo

但既然你的任务是实施一个 shell 和&&操作员自己,通过调用外部的、已经存在的 shell 来完成它似乎并不真正符合任务的精神。您可以只使用一些现有的 shell 开始,而不必编写一行 C 代码。

相关内容