2010-12-16 6 views
8

Linuxでは、コンソールアプリケーションからstdoutをコンソールではなくファイルにリダイレクトしようとしています。私はソースコードを持っていません。私はいくつかの方法を試しましたが、すべてが空のファイルになりました。出力リダイレクトがなければ、すべてうまく動作します(コンソールメッセージが表示されます)。特定のプログラムで出力リダイレクトが機能しない

私には、例えば、試してみました:

progname > out.txt 
progname > out.txt 2&>1 

、何もout.txtをして、コンソールに表示されます。

私はstraceでアプリケーションを実行しようとしました。私は、出力のリダイレクトを導入すると何の書き込みは、私は、アプリケーションがメッセージを書き込む前に、何かのためにテストしていると思わせるた、まったく呼び出さないがある、

write(1, "bla bla", 8) 

- 私はリダイレクトを使用しない場合は、私は以下のような行を参照してください。探しているアプリケーションは何ですか?どのように私はそれをバイパスできますか?

私はCentOS 5.5とBashを使用しています。

答えて

5

stdinと/ stdoutがttyの場合、あなたのstraceに基づいて、プログラムがテストしているように見えます。私はそれを使用したことはありませんが、あなたはempty.sourceforge.netを使ってみることができます。あなたのプログラムのチェックを欺くべきである偽のttyを作成することが考えられます。

+0

ありがとう!それは動作します - 空の-f -L out.txt progname – kshahar

9
progname > out.txt 2>&1 

編集:あなたが実際にこれをしなかったし、それはあなたの質問にタイプミスだった場合。出力がTTYであるかどうかをアプリケーションがチェックする可能性があります。

EDIT2: [OK]を、その場合には、Debianの/ Ubuntuのではscript -qc progname > out.txt > 2>&1

を試し、scriptは必須のパッケージであり、常にインストールさbsdutilsパッケージの一部です。

+0

質問にはタイプミスがあります。しかし、とにかく、私はアプリケーションがstdoutを使用していることを知っています。 TTYをチェックすると、出力メッセージをどのように取得できますか? – kshahar

1

は、それが印刷された1を参照することは、/ dev/nullに一度に単一のストリームをリダイレクトするようにしてください:

progname > /dev/null 
progname 2> /dev/null 

次にあなたがキャプチャするために持っているストリーム表示されます。技術的な理由から、stdoutに情報メッセージを出力するプログラムもあります。

関連する問題