2012-12-03 58 views
1

我有兩個程序(Prog1.cProg2.c)寫在C和他們每個人都採取一個命令行參數。如何使用bash腳本將一個C程序重定向到其他C程序?

Prog1.c以文件名作爲參數,從文件中讀取內容並將其輸出到STDOUT(標準輸出)屏幕上。 Prog2.c將數據作爲參數並執行一些操作。我想將Prog1.c的輸出重定向到Prog2.c作爲輸入。

我曾嘗試以下bash腳本,給了我錯誤

#!/bin/bash 
prog2 "`prog1 file.txt`" 

我也嘗試過,沒有引號,在兩種情況下,它給了我下面的錯誤。

Prog2:: argument list too long. 
+0

對於Prog2,'將數據作爲參數'和'在STDIN上讀取數據'似乎更加正確',因爲如果Prog1的輸出足夠大,將很快用盡命令行緩衝區空間。 – SirDarius

+0

訪問 [此鏈接] [1] ,它可能會幫助你。像你一樣的問題。 [1]:http://stackoverflow.com/questions/8593939/redirecting-output-of-ac-program-to-another-c-program-with-a-bash-script-under – Shahzeb

+0

我已經閱讀了整個主題,並沒有解決這個問題。希望你理解兩個線程之間的區別。 – Junaid

回答

3

爲了得到一個命令的輸出作爲另一個命令,你可以使用反引號參數:

prog2 "`prog1 file.txt`" 

或使用$()(我bash):

prog2 "$(prog1 file.txt)" 

如果要將prog1的STDOUT用作STDIN for prog2,請使用| (管)操作:

prog1 | prog2 

注意:當你想使用管道,你需要修改PROG2的代碼,因爲它需要從標準輸入,而不是命令參數(該main()功能argv)來讀取。有關如何執行此操作的示例,請參閱How to read a line from the console in C?

1

當你拿到「參數列表太長」,你已經達到了命令行系統限制,必須在兩地使用反引號PROG1

prog2 "`prog1 file.txt`" 

之前和之後。然後,您必須找到另一種方式將數據發送到prog2。您可以從stdin閱讀,而是和管PROG1輸出到PROG2

prog1 file.txt | prog2 

當你管,從PROG1的數據PROG2,你必須改變PROG2並從標準,而不是使用argv的讀取。由線

實施例讀取線:

char buf[1024]; 
while (fgets(buf, 1024, stdin)) { 
    /* process line in buf */ 
} 

實施例閱讀空格分隔單詞

char buf[1024]; 
while (scanf("%s", buf) != EOF) { 
    /* process word in buf */ 
} 
+0

感謝您指出。我實際上在腳本中使用了''。這只是錯字。 – Junaid

+0

試過雙方。他們不一起工作。我已經一一測試,他們的工作。 – Junaid

+0

@Junaid看看修改後的答案。 –

2

PIPES !!!!!

在命令行(或腳本)做prog1 file.txt | prog2

+0

試過這個,它沒有讀取代碼中的任何參數。 – Junaid

相關問題