2013-04-10 136 views
0

出于好奇,我想知道什么是最简单的方式来执行两个或多个Linux命令。让我们来看看下面的例子:一个可执行函数中的几个终端命令

1) free > tmp1 
2) uptime > tmp2 
3) cat tmp1 tmp2 > result 
4) rm tmp1 tmp2 

我们如何能与1号线实现终端相同的:

free > tmp1 && uptime > tmp2 && cat tmp1 tmp2 > result && rm tmp1 tmp2 

现在我试图实现在C相同++(的目标是做一个execlp)例如:

pid_t child; 
child = fork(); 
if (child > 0) { 
execlp("free", "free", ">", "tmp1", "&&", "uptime", "uptime", ">", "tmp2", "cat", "cat", "tmp1", "tmp2", ">", "result", "&&", "rm", "rm", "tmp1", "tmp2", NULL); 
} 

你得到的图片我想。不用说,它不起作用,它只是执行第一个命令,然后死亡。无论如何在这一点上。

真的有必要在一个循环中创建一个分叉过程中单独execlp线,然后以“刷新”的子进程?或者我们有其他方法可以在单个execlp行中执行相同的操作吗?

如果可能的话,请留下,我们怎么能达到同样结果的一个例子。

谢谢。

+0

有没有你不能使用超过一个'execlp'更多理由吗?另外,你确定'''在'execlp'中起作用吗? – Xymostech 2013-04-10 17:59:13

+0

真的没有具体的原因,我只是想探索的选项。不,我不确定,这就是我问的原因。仍在学习。 – dusz 2013-04-10 18:01:05

+0

小优化:“free> result && uptime >> result” – loentar 2013-04-10 18:13:53

回答

3

你混淆了“执行程序”和“进入你的系统的命令解释文本”。你的翻译知道如何处理">""&&",但他们不是可以执行的程序。

使用try system()

system("free > tmp1 && uptime > tmp2 && cat tmp1 tmp2 > result && rm tmp1 tmp2"); 
+0

再次感谢,它确实工作:) – dusz 2013-04-10 18:14:32