2010-07-17 25 views
0

我有一个系统(“sudo apt-get update | sudo apt-get -y install apache2 zip unzip”);但是它同时执行所有相同的命令?我如何使它一个接一个地完成?还有人可能会要求用户输入apt-get的信息,我如何让它显示?C - 系统(“”);一次执行一个

+0

有什么迹象让你觉得这两个命令是同时执行的? – bits 2010-07-17 04:48:37

+0

他们都在一个系统调用,但apt-get接缝说它被锁定,虽然没有任何过程之前系统调用 – Daniel 2010-07-17 04:49:39

+0

是否有任何理由你使用C? – ghostdog74 2010-07-17 04:50:03

回答

5

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

要么替换为两个独立的系统单调用()调用:

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

需要注意的是,当你调用系统(),你的程序不恢复,直到你启动的进程已经退出,因此,这意味着第一个电话会执行,然后是第二个电话。

或者更换&&管道(不一定保证能工作,但它真的应该在任何Linux系统):

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

这意味着只有在命令的右侧将执行左侧退出无误(技术上,退出状态为0)。

您也可以用分号替换管道(;),它应该顺序执行这两个命令,而不管第一个命令的退出状态如何。

+0

谢谢!!!,工作很棒! – Daniel 2010-07-17 04:55:43