读取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。
答
您可以使用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" ...
您可以将命令的输出分配给一个变量:'VAR = $(CMD |尾-1) ' – codeforester
@codeforester我想运行一个单独的命令 – Robert
如果你不想重新编译,有['pv'](http://man7.org/linux/man-pages/man1/pv.1.html) - 发动*。 –