bash 在登录时不读取 $TERMINFO (通过 SSH)

bash 在登录时不读取 $TERMINFO (通过 SSH)

我有一个 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

相关内容