Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

標準出力とエラー出力を別々のフ ァイルに書き出し、画面にも表示したい 。

0 views
Skip to first unread message

tack

unread,
Mar 22, 2004, 10:01:54 AM3/22/04
to linux...@linux.or.jp
初めまして、高橋と申します。

任意のコマンドをシェル(bash)で実行した時に、
標準出力と標準エラー出力を別々のファイルに書き出して、
さらにコンソールに表示するコマンドの書き方はありますでしょうか?

実現したい事
--------------------
標準出力はstdout.txtに保存
標準エラー出力はerror.txtに保存
さらにコンソールには
標準出力とエラー出力の両方を表示したい。
--------------------

参考情報
■標準出力をファイルとコンソールに出力し、
エラー出力を別のファイルに書き出すコマンド

$コマンド 2>erro.txt | tee stdout.txt

■標準出力とエラー出力を同一のファイルに書き出し
、コンソールにも表示させる方法

$コマンド 2>&1 | tee same.txt

ここまでは分かったのですが、上記の方法を実現する方法
が分かりません。
シェルスクリプトのデバックに標準出力とエラー出力を
分けてファイルに書き出す事ができれば便利かと思いメールしました。

■下記の過去データを参考にしたのですが良い方法が思いつきませんでした。
http://search.luky.org/vine-users.6/msg05076.html

以上、

SEKINE Tatsuo

unread,
Mar 22, 2004, 11:38:20 AM3/22/04
to
関根です。

From: tack <ta...@myrealbox.com>
Date: Tue, 23 Mar 2004 00:01:54 +0900

> 実現したい事
> --------------------
> 標準出力はstdout.txtに保存
> 標準エラー出力はerror.txtに保存
> さらにコンソールには
> 標準出力とエラー出力の両方を表示したい。
> --------------------

「コンソール」は本当のコンソール(/dev/console)なのですか?
それとも、プログラムを実行する端末(tty/pty) のことでしょうか?

後者だとして、とりあえず

$ mkfifo p_stdout
$ mkfifo p_stderr
$ tee stdout.txt < p_stdout &
$ tee stderr.txt < p_stderr &
$ コマンド 1> p_stdout 2> p_stderr
$ rm p_std???

で、できました。

一つのコマンドにパイプが複数必要なら、最初から mkfifo で明
示的に(named-)パイプを作ってあげればいいのではないかと。

スマートじゃない気がするけど、他に思いつきませんでした。

なお、FIFO は一つだけ作れば、もう一方はシェルのパイプで十
分です。

--
SEKINE Tatsuo:
tse...@sdri.co.jp System Design & Research Inst. Co.,Ltd.
tse...@isoternet.org ISOTERNET ASSOCIATION JAPAN
tse...@ylug.org Yokohama Linux Users Group

tack

unread,
Mar 22, 2004, 12:32:43 PM3/22/04
to
高橋です。

教えて頂いた、mkfifoコマンドを使用した所、
下記の実現したい機能ができました。ありがとうございます。

>> 実現したい事
>> --------------------
>> 標準出力はstdout.txtに保存
>> 標準エラー出力はerror.txtに保存
>> さらにコンソールには
>> 標準出力とエラー出力の両方を表示したい。
>> --------------------

Tue, 23 Mar 2004 01:38:20 +0900


---
>「コンソール」は本当のコンソール(/dev/console)なのですか?
>それとも、プログラムを実行する端末(tty/pty) のことでしょうか?

「コンソール」と記述していたのは、プログラムを実行する
端末(tty/pty)です。

> $ mkfifo p_stdout
> $ mkfifo p_stderr
> $ tee stdout.txt < p_stdout &
> $ tee stderr.txt < p_stderr &
> $ コマンド 1> p_stdout 2> p_stderr
> $ rm p_std???
>
>で、できました。
>
>一つのコマンドにパイプが複数必要なら、最初から mkfifo で明
>示的に(named-)パイプを作ってあげればいいのではないかと。
>

>なお、FIFO は一つだけ作れば、もう一方はシェルのパイプで十
>分です。

こちらも試してみた所、上手く行きました。
mkfifoコマンドはじめて使用しました、
色々と応用してみたいと思います。

以上、

0 new messages