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

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

.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

おすすめ記事