電子書籍の厳選無料作品が豊富!

kシェルを用いてツールを作っています。

このツールを使用する際には、全ての出力をファイルに出力して
処理の最後に出力ファイルをcatで表示したいと考えております。

出力は、exec 2>&1 ~.logでファイル出力しますが、
そのファイルをcatすると、catの結果もファイル出力になってしまいます。

catを標準出力するにはどうしたら宜しいでしょうか?

A 回答 (5件)

exec でパイプは使えん気がする. あと, 「そのファイルを cat する」理由がよくわからん. 「出力している途中のファイル」を cat する?


cat の「標準エラー出力」をどうしたいかによりますけど, 本当に
exec 2>&1 > foo.log
としているなら「標準出力はファイルに書かれ, 標準エラー出力は (本来の) 標準出力に出る」状態のはずなので
cat hoge 1>&2
で「cat の標準出力を標準エラー出力に出す」とできると思う. これで済むなら簡単.
「cat だけリダイレクトを無効にする」ということだと, 完全な方法はないような気がする. 「不完全だけど普通はうまくいく」方法でよければ, リダイレクトを駆使してなんとかできるかもしれんけど.
    • good
    • 0

私もなんとなくそんな気がするんですが>#4, そんなことするくらいならむしろ「スクリプトでは一切リダイレクトしないで使う人間に任せ

る」方がより正解に近い気がする.
    • good
    • 0

#3ですが、他の方へのお礼の内容を見ると、単にこれでいいような。



( こまんど1
こまんど2
・・・
こまんどn
) 2>&1 | tee tool.log
    • good
    • 0

exec 2>&1 aaaa.log では標準出力はリダイレクトされません。

正確に書いてください。

もし、
exec > aaaa.log 2>&1
なら、その後の標準出力は全部aaaa.logに書かれます。あとで標準出力を使いたいときは、
exec 3>&1 >aaaa.log 2>&1
コマンド。。。
コマンド。。。
exec >&3 2>&3
cat aaaa.log
のようにします。
    • good
    • 0

質問を読んでも状況がよく分からないのですが、



・その「ツール」はkshのスクリプトですか?
 そうだとして、以下tool.shと書きます。
・質問の中の「exec 2>&1 ~.log」はtool.shの中で実行しているものですか? それともtool.shの出力を~.logに出力しているものですか?
・同じく、catの実行はtool.shの中で実行しているものですか?
・「catの結果もファイル出力になってしまう」ということは、catの結果をリダイレクトしているということですよね? そのリダイレクト先も同じ~.logなのでしょうか?

下記のようにすればcatの結果が何かのファイルにリダイレクトされることはないはずですが、この形ではダメなのでしょうか。
tool.sh 2>&1 > ~.log
cat ~.log

~.logの内容を標準出力するタイミングが変わってもいいのであれば、catではなくteeコマンドを使う手もあります。
tool.sh 2>&1 | tee ~.log
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

説明が足りなくて申し訳ありません。
「exec 2>&1 ~.log」はtool.shの中で実行します。
catも同様です。

./tool.sh
と実行すると、全ての出力がファイルにされ、
テラタームにもその内容が表示されるようにしたいです。

teeコマンドを使うとするとこんな感じでしょうか?
「exec 2>&1 | tee tool.log」

お礼日時:2009/02/15 23:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!