对于一个长时间运行的任务,我想要一个进度显示。我目前\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