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 に答える