.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
カラー出力もありますが、環境変数セクションのみです。
答え1
これは通常の動作です。これらの環境変数には、端末の前景色を変更させるエスケープシーケンスが含まれています。任意のプログラムから出力するless
ときenv
。
これらの変数には実際のエスケープ文字を含める必要があり、lessは後処理を実行しません。
通常、プログラムには少数の構成変数を入れることができます。少ないキーファイルLESS_TERMCAP_xx
しかし、lesskeyファイルを読み取る前にlessは変数を読み取るため、変数には機能しません(less 444で始まります)。したがって、環境に投入する以外に選択肢はありません。
man
これらの変数を他の目的にのみ使用するには、エイリアスを使用して環境変数を設定するラッパースクリプトに変数を設定less
できます。man
PAGER
#!/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
~/.zshrc
man
MANPAGER
export MANPAGER=less-color
~/.profile
答え2
バックスラッシュの後にeを含む文字列ではなく、実際のエスケープ文字を含む文字列で、これらのLESS_ *変数の値を誤って設定したとします。したがって、この値が表示されるたびに端末の色が変わります。
私はあなたが.bashrcで指定した設定を注意深く見て、それが正しいことを確認します。私はあなたがすべきことはドル記号を削除することだけだと思います。
答え3
@Gillesが彼の答えで指摘したように、これは予想される動作です。
カップル情報を追加します。
LESS_TERMCAP_xx
TERMCAP 機能をオーバーライドします。このオーバーライドは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 "$@"