我有一个系统(“sudo apt-get update | sudo apt-get -y install apache2 zip unzip”);等,但是它一次完成所有相同的命令?,我怎么做才能一个接一个地完成?还有一些人可能会要求用户从apt-get输入信息,我该怎么做才能显示?
答案 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)。
您也可以使用分号(;
)替换管道,无论第一个命令的退出状态如何,都应按顺序执行这两个命令。