2011-12-21 13 views
1

私は2つのシンプルなCプログラムを書いています。プログラム1は定義済みの文字列を出力し、プログラム2は文字列を引数として取ります。Cプログラムの出力を別のCプログラムにリダイレクトします。

私がしようとしているのは、program1の出力を取得してprogram2に渡すことです。私は、bashのチュートリアルを進めてきたと私は見つけることができる唯一のソリューションでした:

program1 | program2 

これが動作するようになっているが、私はsegmantation障害を取得します。だから私はこれを試して、それは動作します。

program1 | program2 abc 

この結果、出力ファイルには文字列 "abc"が含まれていることがわかります。プログラム1 | program2は簡単なようですが、私はここに何か不足していると思いますか?

+1

スクリプトを投稿、あなたの代わりに変数に出力を格納する必要がある場合があります直管。 – ProfessionalAmateur

+2

彼が言及したように、彼のプログラム2はSTDINではなくその文字列を引数として取ります。これが問題の原因です。 – ArjunShankar

+0

はい、私はstdinからの文字列と私の元のスクリプトが動作するように2番目のプログラムを修正しました。すべての答えをありがとう。 – Ihateparsing

答えて

4

|右のプログラムは、左のプログラムのSTDOUTを(STDINとして)読み込みます。

あなたのprogram2はSTDINをまったく読みません。引数(STDINではない)を読み込みます。

あなたが行う必要があります。

program2 `program1` 

bashは(それがバッククォートを見たときに)プログラム1を評価し、PROGRAM2への引数として渡します。

私のキーボードでは、バックティック( `)は" 1 "キーの左にあり、LEFT TABキーの上にあります。

EDIT: program1の文字列出力にスペースが含まれており、文字列全体が一つの引数として解釈させたい、「との文字列を引用した場合」または「」:

program2 "`program1`" 
+0

ありがとうございましたこれは動作するようです。私はprogram1の2つの出力があるようにプログラムを修正し、program2は2つの引数をとります。それは複数の引数でも機能するようです。 – Ihateparsing

+1

私は、バックスティックを 'program2" \ 'program1 \' "'のようにダブルアポストロフィで引用する方が良いと思います。それ以外の場合は、program1の出力にスペースが含まれていると、1つの引数ではなく複数の引数として扱われます。 'echo \' cat aFile \ ''はその良い例です。 – v1Axvw

+0

また、 'program2" $(program1) "'が有効な代替手段であることを言及したいと思います。 – v1Axvw

1

あなたが言った、「PROGRAM2文字列を引数として取ります」

パイプ|システムは引数ではなく、プログラムの標準入力を再定義します。

、プログラム2の引数として使用するプログラム1の出力を取るために:

program2 $(program1) 

$()は(もバックティックは `使用することができるが、これを回避するための理由がある)の出力を取りますプログラムを追加して現在の行に追加し、それを再評価します。プログラム1は「foo」を出力した場合ので、実行されるコマンドは、私はこれも動作するはずだと思うprogram2 foo

+1

出力が複数の単語になる場合は、引用符を使用することをお勧めします。 'program2" $(program1) "'またはそれに類するもの。 – cHao

2

です:

$ program1 | xargs program2 
+1

+1。はい、これも機能します。私はbashに組み込まれているので、バッククォートがもっと好きです。 xargsは別のプログラムです。 – ArjunShankar

関連する問題