Windows - ターミナルの色が異常に動作する

Windows - ターミナルの色が異常に動作する

WSL bash を使用したハイパーターミナル

しばらくの間、端末に表示される色に異常な動作が発生していました。上記は、Hyper 端末内の bash (Windows Linux Subsystem から) のスクリーンショットです。色は最初は正常ですが、 の後にアクセス許可の問題が発生しls、すべてがおかしくなります。その後、灰色の背景がいつまでも続きます。

スクリーンショットはありませんが、VSCode 内の Powershell でも同じ動作を目撃したことがあります。そのため、これを Hyper の問題と呼ぶのはためらわれます。エラーが発生したり、何らかの理由でシェルが色を表示する必要性を感じたりすると、すべてがおかしくなるようです。

さらに、私は試してみましたが、ls --color=autoうまくいきませんでした - 同じ結果が生成されます。

これを防ぐ Windows / bash / WSL 設定を知っている人はいますか?

編集: このハイライトは、Windows 上の Bash on Ubuntu の設定パネル内の「デフォルト」オプションで設定されているデフォルトの「画面の背景」の色を尊重することがわかりましたが、特定のコマンドが呼び出された場合のみです (上記のスクリーンショットのように)。これは、私よりも知識のある人にとっては意味があるでしょうか?

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

答え1

これを徹底的に調べると、解決策はWSL設定のデフォルトの色を「画面の背景」の色に設定することだと分かりました。(#000)。Scott の回答で述べられているように、希望する色に設定しようとしましたが、うまくいきませんでした。WSL から送られる色はすべて加算されるようで、色の変更はサード パーティ プログラム (Hyper、VSCode) の背景色と組み合わさって衝突します。

答え2

あなたの更新により状況が明確になりました。当然のことですが、プログラムは端末にテキストを書き込むことで、端末にテキストを表示するよう指示します。あまり知られていない事実ですが、プログラムは端末に非表示の文字を書き込むことで、端末にさまざまな他のアクション (カーソルの移動、画面の一部の消去など) を指示できます。いくつかの個別の文字が機能を果たします (たとえば、左に移動するには Backspace と Carriage Return、右に移動するには Tab)。しかし、一般的には文字のシーケンスであり、ほとんどの場合 Escape で始まるため、「エスケープ シーケンス」と呼ばれています。1970 年代と 1980 年代に、端末はハードウェア製品であったベンダーごとに独自のエスケープシーケンスを選択し、混乱が生じました。時間が経つにつれて、標準が進化した

興味深いエスケープシーケンスのグループとしては、グラフィックレンディションの選択 (SGR)家族を支配するどうやって表示可能なテキストが表示されます。太字、斜体、下線、色などのプロパティが含まれます。通常、デフォルト以外のスタイルでテキストを表示した後、プログラムは端末をデフォルトの表示スキームに戻そうとします。オフ 太字、斜体、下線などの色はサポートされていますが、これらのプロパティを有効にするものほど広くサポートされていません。黒の背景に白の前景色を設定するエスケープ シーケンスもありますが、ユーザーが別の既定のスキームを好む可能性があるため、あまり役に立ちません。そのため、色を使用するプログラムは通常、リセット シーケンスを送信して終了します。これにより、プロパティで指定された既定の表示スキームに端末が切り替わります。

要約 このようなプログラムはpwd、単にテキストを表示するだけです。テキストをカラーで表示するプログラムは、端末をデフォルトの色にリセットすることで終了し、他のプログラムがエスケープ シーケンスを書き込んで再度変更するまで、その色は有効のままになります。

すると疑問が残る。なぜ端末は始める白地に黒のモードでは、初期化ファイル ( .profile.bashrcなど) のいずれかに、明示的にこれらの色を設定するものがある可能性があります。

解決策は、デフォルトのプロパティを希望どおりに変更することです (例: 黒い背景に白いテキスト)。適切なダイアログが見つかったようです。画面の背景色を黒に変更して、[OK] をクリックするだけです。

関連情報