1

command の実行後に stdout をログ ファイルにリダイレクトするスクリプトがありますxyz。私はコンソールでこれをやってみました:

xyz > temp.log &

そして、私temp.logが期待するように完璧に見えるとき。しかし、スクリプト内で上記のコマンドを実行すると、temp.log はすべての stdout の 1 つの大きな行にすぎません。コンソールから実行するのと同じように印刷するにはどうすればよいですか? 以下にログを示しました。

xyz > temp.logコンソールから実行中(&N)

/source_id:int64/(Green-aeon-GlobalMillennium-Spout): 18
/source_id:int64/(Green-aeon-GlobalMillennium-Spout): 6
/source_id:int64/(Green-aeon-GlobalMillennium-Spout): 3
/source_id:int64/(Green-aeon-GlobalMillennium-Spout): 2
/source_id:int64/(Green-aeon-GlobalMillennium-Spout): 19
/source_id:int64/(Green-aeon-GlobalMillennium-Spout): 11
/source_id:int64/(Green-aeon-GlobalMillennium-Spout): 1
/source_id:int64/(Green-aeon-GlobalMillennium-Spout): 12
/source_id:int64/(Green-aeon-GlobalMillennium-Spout): 3

スクリプト内からの実行

ESC[?1049hESC[1;48rESC(BESC[mESC[4lESC[?7hESC[HESC[2JEvery 5.0s: Green-aeon-GlobalMillennium-SpoutESC[1;178HTue Feb 12 11:36:08 2013ESC[3;1H/source_id:36/sch_event:1797777 for Green-aeon-GlobalMillennium-Spout at Tue Feb 12 11:16:41 CST 2013^MESC[4d/source_id:36/sch_event:1797779 for Green-aeon-GlobalMillennium-Spout at Tue Feb 12 11:16:41 CST 2013^MESC[5d/source_id:36/sch_event:1797781 for Green-aeon-GlobalMillennium-Spout at Tue Feb 12 11:16:41 CST 2013^MESC[6d/source_id:36/sch_event:1797783 for Green-aeon-GlobalMillennium-Spout at Tue Feb 12 11:16:41 CST 2013^MESC[7d/source_id:36/sch_event:1797785 for Green-aeon-GlobalMillennium-Spout at Tue Feb 12 11:16:41 CST 2013^MESC[8d/source_id:36/sch_event:1797787 for Green-aeon-GlobalMillennium-Spout at Tue Feb 12 11:16:41 CST` 2013^MESC[9d/source_id:36/sch_event:1797789 for Green-aeon-GlobalMillennium-Spout at Tue Feb 12 11:16:41 CST 2013^MESC[10d/source_id:36/sch_event:1797791 for Green-aeon-GlobalMillennium-Spout at Tue Feb 12 11:16:41 CST 2013^MESC

これがスクリプトです

#!/bin/sh

die () {
    echo >&2 "$@"
    exit 1
}

[ "$#" -ge 4 ] || die "usage notification_stats <table_name> <listener_name> <time_interval> <time_to_run>"

echo $3 | grep -E -q '^[0-9]+$' || die "Numeric argument required, $3 provided for time_interval"
echo $4 | grep -E -q '^[0-9]+$' || die "Numeric argument required, $4 provided for time_to_run"

watch -n $3 xyz -v $1 $2 > notify.log &
$my_pid = $!

sleep $4 
kill -9 $my_pid
4

1 に答える 1

3

使用しないでくださいwatch。プログラムを繰り返し実行するためではなく、インタラクティブな表示を目的としています。

使用できます

#!/bin/bash
while (( SECONDS <= $4 ))
do 
    xyz -v $1 $2
    sleep $3
done > notify.log

代わりは

于 2013-02-12T18:13:57.397 に答える