bashはログイン時に$ TERMINFOを読みません(SSH経由)。

bashはログイン時に$ TERMINFOを読みません(SSH経由)。

OpenVZ Fedora 20 VPSがあり、SSH経由で接続すると、保存されたtermcapファイルが設定されていても$XDG_DATA_HOME/terminfo/x/xterm-termite読み込まれませんTERMINFO=$XDG_DATA_HOME/terminfo。 subshel​​l bashを実行すると正常に動作します。それともexec bash私の最後に追加するとうまく.profileいきます。

私は見たこの問題そしてそれが同じであるかもしれないと疑いなさい。しかし、/usr/binとにかく私はbashバージョンでログインしました

$ echo $BASH
/usr/bin/bash
$ which bash
/usr/bin/bash

また、VPSでUbuntu 13.10を試してみましたが、同じ問題が発生しました。

Patrickの質問は本当に私を考えさせ、VPSの基本的なオペレーティングシステムがREHLであることを知っています。これはどのような方法で影響を与えますか?


というファイルを受け取りました。environment私からディレクトリが.profile$TERMINFOterminfoXDG_DATA_HOME

$ echo $TERMINFO
/home/evan/.local/share/terminfo
$ echo $XDG_DATA_HOME
/home/evan/.local/share
$ find $TERMINFO
/home/evan/.local/share/terminfo
/home/evan/.local/share/terminfo/x
/home/evan/.local/share/terminfo/x/xterm-termite
$ echo $TERM
xterm-termite

これは私のLinode VPSでうまく機能します。

答え1

Bashは、起動時(ほとんどのプログラムと同様)または変数が変更されたときにのみterminfoデータベースエントリをロードしますTERMTERMINFO変数の変更はすぐには適用されません。これは、terminfoエントリがロードされたときにのみ使用され、再ロードをトリガーしません。

これを実行すると、現在の値に基づいて端末エントリをロードするexec bash新しいbashインスタンスが起動します。TERMTERMINFO

に割り当ててterminfoデータベースを再ロードできますTERM。 Bashは最適化しTERM=$TERMてデータを再ロードしないため、中間値を使用する必要があります。

TERMINFO=…
# Reload the terminfo entry to take the new value of $TERMINFO into account
old_TERM=$TERM; TERM=dumb; TERM=$old_TERM; unset old_TERM

関連情報