複数のコマンドで予期しないカラー出力が発生する

複数のコマンドで予期しないカラー出力が発生する

.bashrc今カラー出力を得るためにこれを私のアイテムに追加しましたless

# Colorize less man pages.
export LESS_TERMCAP_md=$'\e[01;34m'
export LESS_TERMCAP_us=$'\e[01;33m'
export LESS_TERMCAP_so=$'\e[01;44;37m'
export LESS_TERMCAP_mb=$'\e[01;31m'
export LESS_TERMCAP_mr=$'\e[01;35m'
export LESS_TERMCAP_me=$'\e[00m'
export LESS_TERMCAP_ue=$'\e[00m'
export LESS_TERMCAP_se=$'\e[00m'

...現在、特定のコマンド(環境変数の表示に関連しているように見えます)がこれらの新しい設定に一致するカラー出力を生成します。私が脱出を間違えたのでしょうか?それとも意図的な行為でしょうか?別のエスケープバリアントを試しましたが、機能しませんless

たとえば、次はenvコマンドのスクリーンショットです。

環境コマンド

php -iカラー出力もありますが、環境変数セクションのみです。

php -i コマンド

答え1

これは通常の動作です。これらの環境変数には、端末の前景色を変更させるエスケープシーケンスが含まれています。任意のプログラムから出力するlessときenv

これらの変数には実際のエスケープ文字を含める必要があり、lessは後処理を実行しません。

通常、プログラムには少数の構成変数を入れることができます。少ないキーファイルLESS_TERMCAP_xxしかし、lesskeyファイルを読み取る前にlessは変数を読み取るため、変数には機能しません(less 444で始まります)。したがって、環境に投入する以外に選択肢はありません。

manこれらの変数を他の目的にのみ使用するには、エイリアスを使用して環境変数を設定するラッパースクリプトに変数を設定lessできます。manPAGER

#!/bin/sh
escape=␛     # a literal escape character
export LESS_TERMCAP_md=$escape'[01;34m'
exec less "$@"

(または、#!/bin/bash最初の行に を使用して#'\e'構文を使用してエスケープ文字を取得することもできます。ダッシュがある/bin/shシステムでは/bin/sh実際には目立たないかもしれませんが、ダッシュがあるシステムでは少し高速です。)

このスクリプトを呼び出してまたはにless-color追加します。一部のシステムでは、別名を作成する代わりに環境変数を設定して、他のポケットベルを使用するように指示することがあります。alias man='PAGER=less-color man'~/.bashrc~/.zshrcmanMANPAGERexport MANPAGER=less-color~/.profile

答え2

バックスラッシュの後にeを含む文字列ではなく、実際のエスケープ文字を含む文字列で、これらのLESS_ *変数の値を誤って設定したとします。したがって、この値が表示されるたびに端末の色が変わります。

私はあなたが.bashrcで指定した設定を注意深く見て、それが正しいことを確認します。私はあなたがすべきことはドル記号を削除することだけだと思います。

答え3

@Gillesが彼の答えで指摘したように、これは予想される動作です。

カップル情報を追加します。 LESS_TERMCAP_xxTERMCAP 機能をオーバーライドします。このオーバーライドはless独自に管理され、screen.cその値は後でTERMCAPライブラリから返されたかのように使用されます。これは、制御文字の生のシーケンスでなければならないことを意味します。

この問題を「修正」する方法の私のアカウントは自己包装されていますless

$ cat ~/bin/less 
#!/bin/bash

# Start bold mode
export LESS_TERMCAP_md=$'\e[1;37m'
# Start standout mode
export LESS_TERMCAP_so=$'\e[1;37;41m'
# End standout mode
export LESS_TERMCAP_se=$'\e[0m'
# Start underlining
export LESS_TERMCAP_us=$'\e[4;93m'
# End underlining
export LESS_TERMCAP_ue=$'\e[0m'
# End all mode like so, us, mb, md and mr
export LESS_TERMCAP_me=$'\e[0m'

exec /usr/bin/less "$@"

関連情報