C - 系统(“”);一次执行一个

时间:2010-07-17 04:36:06

标签: c shell ubuntu

我有一个系统(“sudo apt-get update | sudo apt-get -y install apache2 zip unzip”);等,但是它一次完成所有相同的命令?,我怎么做才能一个接一个地完成?还有一些人可能会要求用户从apt-get输入信息,我该怎么做才能显示?

1 个答案:

答案 0 :(得分:5)

该管道符(|)表示sudo apt-get update的输出通过管道输入sudo apt-get -y install apache2 zip unzip的输入。虽然这实际上没有任何意义,但它确实意味着两者同时启动,这不是你想要的。

用两个单独的system()调用替换单个调用:

system("sudo apt-get update");
system("sudo apt-get -y install apache2 zip unzip");

请注意,当您调用system()时,程序不会恢复,直到您启动的进程退出,这意味着第一个调用将执行,然后是第二个调用。

或者用&&替换管道(不一定保证可以正常工作,但在任何Linux系统上都应该这样做):

system("sudo apt-get update && sudo apt-get -y install apache2 zip unzip");

这意味着只有左侧退出时没有错误才会执行命令的右侧(技术上,退出状态为0)。

您也可以使用分号(;)替换管道,无论第一个命令的退出状态如何,都应按顺序执行这两个命令。