〜/ .profileに配置するときにLESS_TERMCAP設定が機能しないのはなぜですか?

〜/ .profileに配置するときにLESS_TERMCAP設定が機能しないのはなぜですか?

次の LESS_TERMCAP 設定があります。

# less config
export LESS=-R         
export LESS_TERMCAP_mb=$'\E[01;31m' # begin blinking
export LESS_TERMCAP_md=$'\E[01;31m' # begin bold    
export LESS_TERMCAP_me=$'\E[0m' # end mode          
export LESS_TERMCAP_se=$'\E[0m' # end standout-mode
export LESS_TERMCAP_so=$'\E[01;44;37m' # begin standout-mode
export LESS_TERMCAP_ue=$'\E[0m' # end underline
export LESS_TERMCAP_us=$'\E[01;33m' # begin underline
export LESSOPEN='| /usr/bin/highlight -O ansi %s 2>/dev/null'

~/.profile観客が少なくなると、完全に混乱します。一方、 と入力すると~/.zshrc機能zshします。なぜですか?

たとえば、非ログインシェル構成ファイルに環境変数を保存する方法を学んだので、~/.profileこれを実行したいと思いました。

追加情報:

 tapyu@tapyu-ThinkPad-P73
 OS: Ubuntu 20.04 focal
 Kernel: x86_64 Linux 5.13.0-28-generic
 Uptime: 2h 25m
 Packages: 2559
 Shell: zsh 5.8
 Resolution: 2048x1152
 DE: GNOME 3.36.5
 WM: Mutter
 WM Theme: Adwaita
 GTK Theme: Yaru-dark [GTK2/3]
 Icon Theme: Yaru
 Font: Ubuntu 11
 Disk: 123G / 217G (60%)
 CPU: Intel Core i7-9750H @ 12x 4.5GHz [43.0°C]
 GPU: Intel Corporation UHD Graphics 630 (Mobile)
NVIDIA Corporation GP107GLM [Quadro P620] (rev a1)
 RAM: 4740MiB / 23681MiB

ありがとうございます。

ベストアンサー1

変数の値を確認してくださいLESS_TERMCAP_xxx

print -lr ${(q)LESS_TERMCAP_mb}

(またはzshを使用していない場合echo "$LESS_TERMCAP_mb" | od -tx1c:)

\$\\E\[01\;31mThomas Dickeyが推測したように、代わりに$'\033'\[01\;31m$ \ E [...代わりに033 [...)が表示されることがあります。これは、構文(ダッシュなど)がわからないシェルから呼び出された場合に発生する可能性が.profileあります$'…'/bin/shdashはUbuntuを含む多くの人気ディストリビューションで利用可能です。

1つの解決策は、エスケープ文字を表す別の方法を使用することです。これを使用してprintf移植可能に作成できます。

esc=$(printf \\033)
export LESS_TERMCAP_mb="${esc}[01;31m" # begin blinking

または.zshrc。その後、tputエスケープシーケンスをハードコーディングする代わりに呼び出すことができます。 (LESS_TERMCAP_*変数のドキュメントはありますか?役に立つかもしれません。 )

または、以下を使用してこれらの変数を定義します。いくつかのキー、lessの設定ファイル()に書き込まれます~/.less。常に同じ値に設定すると、環境に置くよりも意味があります。less特別な構成です。しかし、以前のバージョンのlessでは機能しません。

おすすめ記事