答え1
\n
行の最後まで消去してはいけません。内容は変更されていないままにしてください。独立コマンド
printf 'abcdef\rghi\n'
ghidef
代わりに印刷が終了します。ghi
これは意図的に設計されています。\r
カーソルを行の先頭に移動して上書きしますが、ghi
そのabc
ままにdef
します。
行の最後まで消去するには、\e[K
(行から消去)エスケープシーケンスを使用できます.したがって、このコマンドは次のように表示されますghi
。
printf 'abcdef\r\e[Kghi\n'
(注:\e[K
新しいテキストの終わりではなく行の先頭からエクスポートします。カーソルが次の行に移動しようとすると、シーケンスの動作が混乱するためです。新しいテキストがユーザーのテキストと同じ場合は問題が発生します。)この端末エミュレータほど広いと、視覚的な欠陥が発生する可能性があります。
状況をより複雑にすることは、明らかに印刷されたコンテンツが端末に直接移動するのではなく、一部のDockerコンポーネントが端末test |
の前にターコイズテキストを追加することです。この前に追加のタスクを実行するエンジンは明らかに適切な処理の準備ができていないため、以前の\r
出力をオーバーライドする「正しい」動作を達成できない可能性があります。この理論が確認されたら、そのソフトウェアの機能を要求することをお勧めしますtest |
。\r