修正する

修正する

ターミナル出力で背景色をオンまたはオフにしようとすると、奇妙な動作が発生します。

#!/bin/sh

printf "\e[48;5;203m"
printf "AAA\n"
printf "\e[0m"

printf "BBB\n"
printf "CCC\n"

AAA赤い背景で印刷した後、背景色をオフにして次の行を印刷したいと思います。ただし、出力は次のようになります。

ここに画像の説明を入力してください。

修正する

いいですね。新しい端末で試してみましたが、期待どおりに機能しました。ただし、図に示すように出力を取得する前のターミナルウィンドウはまだ開きます。そこで何が起こったの?この問題を引き起こす「ジャンク」は端末に残っていますか?

reset以前のターミナルウィンドウでこれを行いましたが、出力は正しいです。

ベストアンサー1

AAA\n印刷するときターミナルの一番下に、端末はテキストをスクロールし、下部に空白行が表示されるようにする必要があります。現在の背景色(赤)を使用して行を表示します。次に、BBB\n独自の背景色を使用してその背景に印刷します。新しい背景色はBBB現在の行()の一部の文字にのみ影響しますが、次の空行が表示されるときは関連しています。実際、次の行(CCC表示される位置)は正常に見えます。

AAA\n下部に印刷しない場合、端末は行を追加する必要はなく、空白がすでにあります。空白が黒になることが発生します。

再現するには、端末の下部と「上」に達するまでコードを数回実行します。

次の2つのコマンド(それぞれ独自の端末で)を繰り返すと、一番下に達するまで同じ出力に見える結果が得られます。

  1. printf "\e[48;5;203mAAA\n\e[0m"
    
  2. printf "\e[48;5;203mAAA\e[0m\n"
    

2番目のケースでは、背景がリセットされます。今後 \n

私のテストプラットフォーム:Konsole 21.12.3 TERM=xterm-256color、。

おすすめ記事