我想从bash命令中读取当前输出行。
我知道我可以用cmd | tail -1
得到这个,但我想把它作为一个单独的命令(tint2可执行文件)作为一种进度表来运行。
例如:
我有一个python程序在下载图像时输出Downloaded x out of y
,我希望将输出作为shell变量。
或者:
也许我正在运行pacman -Syy
而我想要
extra 420.6 KiB 139K/s 00:09 [#####-----------------] 24%
这可能吗?
编辑:终端正在运行。我想要一个命令,输出前一个终端中命令的最后一个输出,可能输入一个pid。
答案 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" ...