我有一个 OpenVZ Fedora 20 VPS,当我通过 SSH 连接时,尽管已设置,但存储在 中的 termcap 文件$XDG_DATA_HOME/terminfo/x/xterm-termite
并未被读取TERMINFO=$XDG_DATA_HOME/terminfo
。如果我执行子 shell 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
在 my 中.profile
,$TERMINFO
如果该terminfo
目录存在于XDG_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 数据库条目TERM
。更改TERMINFO
变量不会立即生效:它仅在加载 terminfo 条目时使用,不会触发重新加载。
当您运行时exec bash
,这将启动一个新的 bash 实例,该实例根据TERM
和的当前值加载终端条目TERMINFO
。
您可以通过分配给 来重新加载 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