2011-12-21 103 views
1

我寫了兩個簡單的C程序,program1打印出一個預定義的字符串,program2接受一個字符串作爲參數並將該字符串寫入文件。在Linux下使用bash腳本將C程序的輸出重定向到另一個C程序

我想要做的是採取program1的輸出,並將其傳遞給program2。我經歷過的bash教程,我能找到的唯一解決辦法是:

program1 | program2 

據說這是爲了工作,但我得到一個segmantation故障。所以我試了這個,它的工作原理。

program1 | program2 abc 

正如你可以猜到這將導致包含字符串「abc」的輸出文件。 program1 | program2似乎很直接,但我想我在這裏錯過了一些東西?

+1

安置自己的腳本,你可能需要將輸出存儲到一個變量,而不是直管。 – ProfessionalAmateur 2011-12-21 17:40:47

+2

正如他所提到的,他的program2將字符串作爲參數,而不是STDIN。這是問題的原因。 – ArjunShankar 2011-12-21 17:43:32

+0

是的,我修改了第二個程序,以便它從stdin中獲取字符串,並且我的原始腳本可以工作。感謝所有的答案。 – Ihateparsing 2011-12-21 18:02:12

回答

4

|使程序向右讀取(如STDIN)左側程序的標準輸出。

但您的program2根本沒有讀取STDIN。它讀取參數(不是STDIN)。

你應該這樣做:

program2 `program1` 

猛砸評估程序1(當它看到反引號),並將其作爲對Arg的程序2。

在我的鍵盤上,倒退(`)位於「1」鍵的左側,位於我的LEFT TAB鍵的上方。

編輯: 如果program1字符串輸出包含空格,並且希望整個字符串被解釋爲一個參數,以「引用串」或「」:

program2 "`program1`" 
+0

感謝這一個似乎工作。我修改了程序,所以程序1有兩個輸出,程序2有兩個參數。它似乎也與多個參數一起工作。 – Ihateparsing 2011-12-21 17:55:18

+1

我認爲最好引用帶雙撇號的反引號:'program2「\'program1 \'''。否則,如果程序1的輸出包含空格,則不會將其視爲一個參數,而會視爲多個參數。 echo'cat aFile''就是一個很好的例子。 – v1Axvw 2011-12-21 18:07:53

+0

另外,我會提到'program2「$(program1)」'是一個有效的選擇。 – v1Axvw 2011-12-21 18:09:35

1

你說,「程序2以字符串作爲參數。「

管道|系統重新定義程序的標準輸入,而不是參數。

爲了利用程序1的輸出作爲參數傳遞給程序2,使用:

program2 $(program1) 

$()(也背蜱`都可以使用,但也有原因來避免這個)開的輸出一個程序並將其添加到當前行,然後重新評估它;因此,如果程序1打印出「富」,要運行的命令是program2 foo

+1

請注意,如果您的輸出不止一個單詞,您可能需要使用引號。 'program2「$(program1)」'或類似的東西。 – cHao 2011-12-21 17:42:25

2

我想這也應該工作:

$ program1 | xargs program2 
+1

+1。是的,這也會起作用。我更喜歡反引號,因爲它是建立在bash中的。 xargs是一個單獨的程序。 – ArjunShankar 2011-12-21 17:44:56

相關問題