- PR -

シェルスクリプト 標準エラーのリダイレクト

1
投稿者投稿内容
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2002-11-29 15:11
通常、

#Comand 2 >> filename

で標準エラーがfilenameへ追加され、内容は

#cat filename
エラーの内容

となっております。

これを

#cat filename
エラーの内容  システム日付

というようにスペースもしくはタブで区切られた一行のレコードとして出力したいと思います。

 こうするための、シェルスクリプトのうまい書き方はないでしょうか。ご教授願います。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2002-11-29 22:07
command 2>&1 1>&- |while read LOG; do echo "$LOG : `date `";done
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2002-11-29 22:07
しまった。ファイルに出すの忘れた

command 2>&1 1>&- |while read LOG; do echo "$LOG : `date `" >> filename;done
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2002-12-02 08:29
ご返答ありがとうございます。すみません、知識不足で全て解読できません。。次の解釈で間違いないのでしょうか。。

command 2>&1
→エラーを標準入力と同じところに出力する。

1>&- |while read LOG; do echo "$LOG : `date `" >> filename;done
→どこで分けて考えればよろしいでしょうか。。「-」は何を意味しておりますでしょうか。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2002-12-02 10:26
command 2>&1 1>&- <BR>
で、標準出力 (ファイルデスクリプタ1)を閉じて、標準エラー出力(ファイルデスクリプタ2)を標準出力にあてがっている。つまり、もとの標準出力に出ていたものは無くなって、標準エラーに出ていたものが標準出力として出力されるようになっている。
<BR>
|while read LOG; do echo "$LOG : `date `" >> filename;done
<BR>
これは、パイプ(”|”)で前のコマンドの標準出力を受け取って、1行ごと読み取り、変数LOGに入れ、その変数に、dateコマンドの出力を加えてファイルに出力してる。
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2002-12-02 11:20
 ご返答ありがとうございます。ファイルディスクリプタとはファイル記述子と同じことでしょうか。。

 ご返信ありがとうございました。またよろしくお願い申し上げます。

1

スキルアップ/キャリアアップ(JOB@IT)