- ベストアンサー
kシェルのリダイレクトについて
kシェルを用いてツールを作っています。 このツールを使用する際には、全ての出力をファイルに出力して 処理の最後に出力ファイルをcatで表示したいと考えております。 出力は、exec 2>&1 ~.logでファイル出力しますが、 そのファイルをcatすると、catの結果もファイル出力になってしまいます。 catを標準出力するにはどうしたら宜しいでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
exec でパイプは使えん気がする. あと, 「そのファイルを cat する」理由がよくわからん. 「出力している途中のファイル」を cat する? cat の「標準エラー出力」をどうしたいかによりますけど, 本当に exec 2>&1 > foo.log としているなら「標準出力はファイルに書かれ, 標準エラー出力は (本来の) 標準出力に出る」状態のはずなので cat hoge 1>&2 で「cat の標準出力を標準エラー出力に出す」とできると思う. これで済むなら簡単. 「cat だけリダイレクトを無効にする」ということだと, 完全な方法はないような気がする. 「不完全だけど普通はうまくいく」方法でよければ, リダイレクトを駆使してなんとかできるかもしれんけど.
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
私もなんとなくそんな気がするんですが>#4, そんなことするくらいならむしろ「スクリプトでは一切リダイレクトしないで使う人間に任せる」方がより正解に近い気がする.
- notnot
- ベストアンサー率47% (4901/10362)
#3ですが、他の方へのお礼の内容を見ると、単にこれでいいような。 ( こまんど1 こまんど2 ・・・ こまんどn ) 2>&1 | tee tool.log
- notnot
- ベストアンサー率47% (4901/10362)
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 のようにします。
- salsberry
- ベストアンサー率69% (495/711)
質問を読んでも状況がよく分からないのですが、 ・その「ツール」は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
お礼
回答ありがとうございます。 説明が足りなくて申し訳ありません。 「exec 2>&1 ~.log」はtool.shの中で実行します。 catも同様です。 ./tool.sh と実行すると、全ての出力がファイルにされ、 テラタームにもその内容が表示されるようにしたいです。 teeコマンドを使うとするとこんな感じでしょうか? 「exec 2>&1 | tee tool.log」