2009-08-27 33 views
1

単に別の呼び出しを呼び出し、stdoutとstderrの出力を別のファイルにリダイレクトするbashスクリプトがあります。BASH:エラーメッセージがファイルにリダイレクトされない

私はこれをやった:コマンド(例えば、間違ったユーザー名とパスワードの組み合わせは、引数として与えられた)誤りであるとき

command 1> datafile 2>> errorfile 

ただし、エラーメッセージがエラーファイルにリダイレクトされません。このスクリプトを実行すると、画面にエラーメッセージが表示されます。たとえば、エラーメッセージは、ユーザー名とパスワードの間違った組み合わせを指定したことを示しています。

私は間違っていますか? stdoutとstderrの両方をファイルにリダイレクトしているので、画面に出力がないはずです。

+0

実際にはうまく動作します。私はfooを作成しましたが、barではなく、 'ls foo bar 1> data 2 >> error'を実行して、目的の結果を得ました。どのバージョンのbashを使用していますか? – Cascabel

答えて

6

おそらく、プログラムはstderrへの書き込みではなく、ユーザーと通信するために直接/ dev/ttyを開いていますか?このアプローチは、パスワードのやりとりに関してはかなり一般的です。ソフトウェアは、リダイレクトがあってもパスワードプロンプトがユーザーに「通過」するようにしたいと考えています。

この場合、出力をファイルにまとめるには擬似端末トリッキーが必要です。

ソフトウェアのソースがない場合は、strace/trussを使用してプログラムが実際に何を行っているかを知ることができます。

+0

詳細を教えてください。 – Davide

+0

具体的に何を知りたいですか?質問は1年以上前に尋ねられました。だから、新しい、具体的な質問をしてください。 –

+0

あなたが答えを持っているかどうか確認してください:http://stackoverflow.com/questions/4056075/module-program-directly-writes-to-stderr-making-redirection-hard – Davide

-1

リダイレクトコマンドが間違っています。 bashのでは、これを試してみてください。

$ cat redir.c 
#include <stdio.h> 

int main(void) { 
     fprintf(stdout, "Hello stdout\n"); 
     fprintf(stderr, "Hello stderr\n"); 
} 
$ ./redir > txt 2>&1 
$ cat txt 
Hello stderr 
Hello stdout 
$ 

'2> & 1' はまた、標準エラー出力をキャプチャするキーです。

+0

いいえ、そのリダイレクトは完全に問題ありません。それを試してみてください。できます。 – bcat

+0

あなたの提案のより明確なバージョンです: 'command> datafile 2>&1 >> errorfile' – Cascabel

+0

@bcat:私は修正しました。私は質問を誤って読んだ - 私は通常、私が示したものである同じファイルにstdoutとstderrが欲しい。それは尋ねられたものではありません。おっとっと。 –

-2

stderrのリダイレクトに「>」が追加されているようです。試してみてください:

command 1> datafile 2> errorfile 

編集:2>は、ファイルを上書きするのに対し、コメントで指摘したとおり、2は>>、ファイルへの追加、標準エラー出力をリダイレクトします。

私は参考のためにこの回答を保持しています。

+0

まあ、それは "追加"のためだった。 >がある場合、新しいエラーファイルが毎回作成されます。 – codingbear

+0

@bLee:Doh!あなたが正しい。それは私がオフィスから出る途中で答えるために得られるものです。編集します。 – PTBNL

関連する問題