对于长时间运行的任务,我希望有一个进度显示。我目前在\33[2K\r
命令的开头使用printf
,最后没有换行符或任何内容。我不喜欢这种方法的是,打印到同一终端的消息(例如,stderr
没有重定向)出现在行的末尾,而不是新行。
如果我将\r
放在进度显示的末尾,其他消息(所有消息都以\n
终止)会在视觉上覆盖进度显示,如果它们比那些短,则会混淆剩余。此外,我不想让/不能调整打印其他消息的行,因为其中一些来自外部库。
如果之后我的进度显示会继续显示在新行上,我就不会遇到问题,但我希望其他消息显示在他们自己的行上(主要是错误消息,但我'我试图尽可能优雅地恢复,所以这个过程将在大部分时间继续进行)
任何想法?
我不需要移植性,如果它只在linux bash上运行,那对我来说没问题。
更新:为了更好地展示我要求的内容:
目前我可以这样做:
status1ERR
status2
或者
ERRtus1
status2
或者
status1
status2 <--- ERR is overriden by status2 here
但我想要的是:
status1
ERR
status2
或者
ERR
status2
在最后一个例子中,ERR覆盖了一个完整的状态行 - 我知道我可以清除前面提到的VT100字符序列的行,但是我无法改变一些错误消息,所以它需要一直使用它们格式为error message\n
答案 0 :(得分:1)
哇。这是我过去的爆炸。
您可以使用ANSI或VT100字符序列进行一些光标定位。 这将让您分离屏幕上的输出类型。 这是一个很好的入门页面:http://wiki.bash-hackers.org/scripting/terminalcodes
答案 1 :(得分:0)
只需在错误消息的开头使用\n
即可。当然,如果你调用一些产生stderr输出的其他代码,它也不起作用。