- PR -

メッセージを画面とlogにを同時に

投稿者投稿内容
noku
常連さん
会議室デビュー日: 2005/07/21
投稿数: 20
投稿日時: 2005-10-18 09:58
シェル内部に任意で返りメッセージを作成して
それを画面出力とlogへの保存に同時にしたいのですが
リダイレクトを使用して試行錯誤しましたがうまくいきませんでした。
teeやscriptコマンドを使用せず、リダイレクトで処理したいのですが
どなたかご存知の方アドバイスお願いします。
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2005-10-18 10:22
おはようございます.
引用:

nokuさんの書き込み (2005-10-18 09:58) より:

teeやscriptコマンドを使用せず、リダイレクトで処理したいのですが
どなたかご存知の方アドバイスお願いします。


logger ではダメですか?
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-10-18 11:00
コード:
whie :
do
    echo msg > `tty`; echo msg >> file
    sleep 1
done

angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-10-18 11:31
おはようございます。
…ところで、何故 tee は不採用なのでしょうか?
コード:
#!/bin/bash
exec > >(tee tee.log) 2>&1
echo message1
echo message2
# ... etc.

angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-10-18 11:49
もう一つ追加
・Before
コード:
#!/bin/sh
echo message1
echo message2
# ... etc.


・After
コード:
#!/bin/sh
function main ()
{
echo message1
echo message2
# ... etc.
}

main "$@" | tee tee.log

noku
常連さん
会議室デビュー日: 2005/07/21
投稿数: 20
投稿日時: 2005-10-18 12:43
angelさん、コブラさん、kazさん
ご返答ありがとうございます。

ボクの質問の仕方が曖昧でした。
明白に再度質問内容を記載します。

シェルスクリプト内にとあるシステムへのコマンドを実行します。
その返りメッセージ実行後に任意で作ったユーザが判断しやすい出力メッセージを作成します。
その返りメッセージと実行後のメッセージ(エラーしかないですが)logに保存しつつ、画面に出力させたいです。

因みにシェルスクリプト内に二つの保存させたいlogファイルを作成し
スクリプト内部にシステムに対し何度かコマンドと任意のメッセージを作成します。
流れの中でA.log、B.logは順不同で出てきます。
それを出力&logに保存させたいです。

出来るならechoは一度しか使わず、リダイレクトとコマンドで何とかしたいのが希望です。
ソースが長くならない、キレイだからと言う単純な理由ですが。

angelさん
コマンド使用せずリダイレクトの組み合わせで何とかならないかと思いがありまして。
散々調べて出来なかったので、ここでアドバイスをもらいに来ました。
今のトコ teeで">>"上書きが一番有力かなと。
コマンドorもしくはecho >> file名 ;tail -n1 file名
ってのも浮かびましたが、echoは一行ですがエラーメッセージが複数行の時もありますので。
yellow
会議室デビュー日: 2005/10/14
投稿数: 2
投稿日時: 2005-10-19 00:34
出力メッセージを一時ファイル(例えばmsg.tmpとか)に作成して、
cat msg.tmp | tee -a logfile
とするのはどうでしょうか?


noku
常連さん
会議室デビュー日: 2005/07/21
投稿数: 20
投稿日時: 2005-10-24 11:21
yellowさん
返信ありがとうございます。

一時ファイルで思いついたのですが
スクリプト内で一時ファイルを作成して、logに落としながらすぐさま
tail -fが一番と思いつきました。
結局teeを使うも
コマンド|tee -a log.log
で画面出力とlog作成するものの
このあとecho $?でコマンド返り値を知りたかったのですが
この場合「tee」の返り値になってしまうと言う結果に陥りました。

一時ファイル&tail -fで試してみます。

スキルアップ/キャリアアップ(JOB@IT)