bashスクリプトでは、長いコマンドの標準出力を1行ずつキャプチャして、初期コマンドの実行中にそれらを分析および報告できるようにします。これは私がそれを行うことを想像できる複雑な方法です:
# Start long command in a separated process and redirect stdout to temp file
longcommand > /tmp/tmp$$.out &
#loop until process completes
ps cax | grep longcommand > /dev/null
while [ $? -eq 0 ]
do
#capture the last lines in temp file and determine if there is new content to analyse
tail /tmp/tmp$$.out
# ...
sleep 1 s # sleep in order not to clog cpu
ps cax | grep longcommand > /dev/null
done
もっと簡単な方法があるかどうか知りたいです。
編集:
私の質問を明確にするために、これを追加します。longcommand
1秒に1回のラインで、そのステータス行を表示します。longcommand
完了する前に出力をキャッチしたいと思います。
このように、longcommand
期待した結果が得られない場合は、潜在的に殺すことができます。
私が試してみました:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
ただし、whatever
(例echo
)longcommand
完了後にのみ実行されます。