0

对于一个长时间运行的任务,我想要一个进度显示。我目前\33[2K\r在命令的开头使用,最后printf没有换行符或任何东西。我不喜欢这种方法的是打印到同一终端的消息(stderr例如,没有重定向)出现在行尾,而不是新的。

如果我将 放在\r进度显示的末尾,其他消息(全部以 结尾\n)将在视觉上覆盖进度显示,并且如果它们比这更短,则与剩余消息混淆。此外,我不想/不能调整打印这些其他消息的行,因为其中一些来自外部库。

如果我的进度显示之后会在新行上继续显示,我没有问题,但我希望其他消息出现在他们自己的行上(主要是错误消息,但我试图尽可能优雅地恢复, 所以这个过程大部分时间都会继续)

有任何想法吗?

我不需要可移植性,如果它只在 linux bash 上运行就可以了。

Upd:为了更好地可视化我的要求:

目前我可以这样做:

status1ERR
status2

或者

ERRtus1
status2

或者

status1
status2  <--- ERR is overriden by status2 here

但我想要的是:

status1
ERR
status2

或者

ERR      
status2

在最后一个示例中,ERR 覆盖了完整的状态行 - 我知道我可以使用上述 VT100 字符序列清除行,但我无法更改某些错误消息,因此它需要始终使用格式error message\n

4

2 回答 2

1

哇。这是我过去的一次爆炸。

您可以使用 ANSI 或 VT100 字符序列来进行一些光标定位。这将让您在屏幕上分离输出类型。这是一个很好的入门页面:http ://wiki.bash-hackers.org/scripting/terminalcodes

于 2013-10-08T21:01:07.067 回答
0

只需\n在错误消息的开头使用 a 即可。如果您调用其他一些产生标准错误输出的代码,这当然是行不通的。

于 2013-10-09T08:36:25.470 回答