【问题标题】:Read the last line of output of a bash command读取 bash 命令的最后一行输出
【发布时间】:2017-01-22 18:46:21
【问题描述】:

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

例如:

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

或者:

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

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

这可能吗?

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

【问题讨论】:

  • 您可以将命令的输出分配给一个变量:var=$(cmd | tail -1)
  • @codeforester 我想运行一个单独的命令
  • 如果你不想重新发明轮子,有pv
  • 您能否提供一些示例代码,即使无法运行,也能说明“我想运行单独的命令”的含义?
  • 我添加了一个编辑@Fred

标签: linux bash shell


【解决方案1】:

您可以使用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" ... 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多