读取bash命令的最后一行输出

时间:2017-01-22 18:46:21

标签: linux bash shell

我想从bash命令中读取当前输出行。 我知道我可以用cmd | tail -1得到这个,但我想把它作为一个单独的命令(tint2可执行文件)作为一种进度表来运行。

例如:

我有一个python程序在下载图像时输出Downloaded x out of y,我希望将输出作为shell变量。

或者:

也许我正在运行pacman -Syy而我想要

extra 420.6 KiB 139K/s 00:09 [#####-----------------] 24%

这可能吗?

编辑:终端正在运行。我想要一个命令,输出前一个终端中命令的最后一个输出,可能输入一个pid。

1 个答案:

答案 0 :(得分:2)

您可以使用tee将内容写入终端和一些日志文件 让我们说你的python程序看起来像这样

function mypython {
   for i in 10 30 40 50 80 90 120 150 160 180 190 200; do
      (( progress = (100 * i + 50) / 200 ))
      printf "extra   xx Kb, total %-3d of 200 (%d %%)\n" $i ${progress}
      sleep 1
   done
}

您可以将输出重定向或tee到tmp文件: (mypython> /tmp/robert.out)& 要么 (mypython | tee /tmp/robert.out)&

在另一个窗口中,您可以获得最后一行 tail -1 /tmp/robert.out

当你只想看到进度时,你可能想要让最后一行覆盖前一行。

mypython | while read -r line; do
   printf "Progress of mypython: %s\r" "${line}"
done

如果这是您想要的,您可能想要更改您的python程序

  printf "...\r" ...