在bash脚本中,我想逐行捕获长命令的标准输出,以便可以在初始命令仍在运行时对其进行分析和报告。这是我可以想象的复杂方法:
# 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
由线显示其状态行每秒一次。我想在longcommand
完成之前捕获输出。
这样,longcommand
如果它没有提供我期望的结果,我可能会杀死它。
我试过了:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
但是whatever
(例如echo
)仅在longcommand
完成后执行。
askubuntu.com/questions/344407/…–
—
特雷弗·博伊德·史密斯