ある標準出力を吐き出すプログラムを、日付区切りのファイル2ヶ所にログ書出ししたく、下記のようなシェルスクリプトを作ったのですが、3行目で標準入力を受け取ってくれません。
#!/bin/sh
LOGDATE=`date +%Y%m%d`
tee -a /usr/test/log1.$LOGDATE >> /usr/test/log2.$LOGDATE
シェルがどのように標準入力の受けとるのか全く分からず作っていますのでどんちんかんな質問かもしれませんが、よろしくお願いいたします。
http://homepage2.nifty.com/cs/linux_command/command/tee.html
$BF|7P(JLinux [Linux$B%3%^%s%I=8(J] tee : $BI8=`F~NO$rI8=`=PNO$H%U%!%$%k$K=PNO$9$k(J
tee の使い方が疑問です。
tee は、標準入力を指定されたファイルと標準出力に出力します。
なので、以下のようにします。
#!/bin/sh
LOGDATE=”`date +’%Y%m%d’`”
echo ”hogehoge” | tee -a /usr/test/log1.$LOGDATE >> /usr/test/log2.$LOGDATE
最初に標準出力があることがポイントです。
標準出力からパイプで標準入力として tee に繋ぎます。
引数をログに出したいときは…
echo ”$*” | tee -a /usr/test/log1.$LOGDATE >> /usr/test/log2.$LOGDATE
となります。
ちなみに、シングル/ダブルクォーテーションとかは、僕の癖なので気にしないでください(^^ゞ
http://www.ybi.co.jp/koike/src/BSH.htm
Bシェルスクリプトのすすめ
> 3行目で標準入力を受け取ってくれません
これは、エラーで止まってしまうという事でしょか、
それとも、エラーは出ないが、予定通りのファイルが作成されない、
あるいは作成されるが、内容が無い...
こういった所に、問題解決のヒントが隠れていませんか?
出来るだけ多くの情報を開示すると、より的確な回答を早く得る事に繋がります。
自前のサーバ(Vine Linux 3.2)で問題のスクリプトをテストしてみたら、アッサリと動いてしまいました。
$ cat test.sh
#!/bin/sh
LOGDATE=`date +%Y%m%d`
tee -a log1.$LOGDATE >> log2.$LOGDATE
$ date +%Y%m%d
20060217
$ echo first > log2.20060217
$ ls
log2.20060217 test.sh
$ echo second | ./test.sh
$ ls
log1.20060217 log2.20060217 test.sh
$ cat log1.20060217
second
$ cat log2.20060217
first
second
シェル変数 LOGDATE を使わない時は上手くいっているようですから、
チャンと変数に予定通りの値がセットされているかを確認されては?
確認してみます。
ありがとうございます。
記入が不足してました。
ある標準出力を吐き出すプログラムがあり、それの受け口として使うシェルスクリプトです。
aruscript | konoscript.sh
といった形で受け渡しされており、ここに手を加えることが出来ないため質問の形になりました。
【追記】2006/2/15 23:30
なお、下記は正しく標準入力が tee にわたるので問題ありませんでした
#!/bin/sh
tee -a /usr/test/log1 >> /usr/test/log2
質問の内容は
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1508581
とほぼ同じなのですが、書いてある内容をもっと詳しく知りたいです