- - PR -
標準出力を複数のストリームに分けたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-04-10 13:38
OS:CentOS4.4
ksh:pdksh-5.2.14-30.3 シェル内で、あるコマンドの標準出力に対して ・そのまま標準出力へ出力 ・他のコマンドの標準入力へパイプ といったことをしたいと考えています。 今のところ ksh での実装を考えていますが、 他のものならできるということであれば ksh 以外でも実装を考えたいと思っています。 いったんファイルに落とすなり、 変数に取るなりしないと実現は難しいでしょうか? | ||||
|
投稿日時: 2008-04-10 14:45
teeコマンドをかませばできるでしょう。
| ||||
|
投稿日時: 2008-04-10 15:05
ファイル部分に具体的に何を指定すると、 コマンドの標準入力に渡せるのでしょうか? 知識が乏しいもので。。。 サンプルいただけませんか? | ||||
|
投稿日時: 2008-04-10 15:20
具体的にどういうことが実現できればいいのかわかりませんが
teeは次のように使います。 df | tee df.txt | grep cygwin dfの出力結果をdf.txtに出力、かつ、dfの結果を次の処理に渡す(パイプライン) UNIX環境が今ないのでcygwinでの実行結果です。 C:\Documents and Settings\app_user>df Filesystem 1K-blocks Used Available Use% Mounted on C:\cygwin\bin 156191960 95641680 60550280 62% /usr/bin C:\cygwin\lib 156191960 95641680 60550280 62% /usr/lib C:\cygwin 156191960 95641680 60550280 62% / c: 156191960 95641680 60550280 62% /cygdrive/c g: 156248156 97971240 58276916 63% /cygdrive/g s: 155580064 150194084 5385980 97% /cygdrive/s t: 155580064 150194084 5385980 97% /cygdrive/t C:\Documents and Settings\app_user>df | tee df.txt | grep cygwin C:\cygwin\bin 156191960 95641680 60550280 62% /usr/bin C:\cygwin\lib 156191960 95641680 60550280 62% /usr/lib C:\cygwin 156191960 95641680 60550280 62% / C:\Documents and Settings\app_user>cat df.txt Filesystem 1K-blocks Used Available Use% Mounted on C:\cygwin\bin 156191960 95641680 60550280 62% /usr/bin C:\cygwin\lib 156191960 95641680 60550280 62% /usr/lib C:\cygwin 156191960 95641680 60550280 62% / c: 156191960 95641680 60550280 62% /cygdrive/c g: 156248156 97971240 58276916 63% /cygdrive/g s: 155580064 150194084 5385980 97% /cygdrive/s t: 155580064 150194084 5385980 97% /cygdrive/t | ||||
|
投稿日時: 2008-04-10 18:16
「そのまま標準出力へ」だと、パイプ後段のコマンドの標準出力と混ざりますが、それは問題ないでしょうか…?
単にコンソールに出力したいだけなら、標準エラーにする手もありますが。( 混ざるという意味では同じですが ) 標準出力ならこんな感じ exec 3>&1 tee /dev/fd/3 | 後段のコマンド exec 3>&- 標準エラーならこんな感じ tee /dev/stderr | 後段のコマンド | ||||
|
投稿日時: 2008-04-10 20:18
申し訳ありません。
前段のコマンドの分を入れずに書いたのと、sh, ksh で exec系の挙動が bash と違ったので、書き直します。 ※bashに慣れていたので、sh,kshでのexecの挙動を勘違いしていました。 標準出力の場合 前段のコマンド | ( tee /dev/fd/3 | 後段のコマンド ) 3>&1 標準エラーの場合 前段のコマンド | tee /dev/stderr | 後段のコマンド | ||||
|
投稿日時: 2008-04-11 00:22
名前つきパイプを使えばよいのでは。
#Cygwin だと、今でも使えないんでしたっけ。 % mkfifo fifo % somecommand | tee fifo | anothercommand % cat fifo | yetanothercommand | ||||
|
投稿日時: 2008-04-13 10:54
progman さん>
わかりづらくて申し訳ありません。 ↑は tee で df.txt に落としていますが、これを標準出力へ出したいようなイメージです。 1.標準出力 2.grep の標準入力 1・2に両方出力したいということでした。 angel さん、holic さん> サンプルありがとうございます。 両名のアドバイスでうまく解決できそうです。 ありがとうございました。 [ メッセージ編集済み 編集者: まさ 編集日時 2008-04-13 11:03 ] |
1