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

问题描述:

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

例如:

我有一个输出Downloaded x out of y因为它下载图像的Python程序,而我想要得到的输出作为一个shell变量。

或者:

也许我跑pacman -Syy,我想

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

这可能吗?

编辑:某些东西在终端中运行。我想要一个命令输出上一个终端的命令的最后一个输出,也许输入一个pid。

+0

您可以将命令的输出分配给一个变量:'VAR = $(CMD |尾-1) ' – codeforester

+0

@codeforester我想运行一个单独的命令 – Robert

+1

如果你不想重新编译,有['pv'](http://man7.org/linux/man-pages/man1/pv.1.html) - 发动*。 –

您可以使用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 |发球的/ tmp /robert.out)&

在另一个窗口中,你可以得到的最后一行与 尾-1 /tmp/robert.out

如果你只想看一个进展,你可能想要得到最后一行来覆盖前一行。

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

如果这是你想要什么,你可能想改变你的Python程序

printf "...\r" ...