2013-04-10 127 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