我最近升级了apt-get dist-upgrade
我的 Kubuntu 和 Lubuntu Linux 系统,现在每次我登录其中一台机器,收到以下消息:
tput: No value for $TERM and no -T specified
以下是该消息的具体截图:
这在我的 Lubuntu 机器和 Kubuntu 机器上都发生过,直到我升级后才出现问题;所以我怀疑这不是用户错误。
我怎样才能解决这个问题?
更新
我已经将其追溯到我的 .bashrc 文件,该文件被我的 .profile 文件调用。不过,现在当我进行 GUI 登录时,我的 .bashrc 文件会运行,而升级之前它不会运行,这有点奇怪。不,我最近没有修改过我的 .bashrc 文件或 .profile。此外,bash 不是我的默认 shell。
问题是我调用tput
.bashrc 文件来设置用于为提示添加颜色的变量。但是在运行 .bashrc 文件时(不合适的时间),$TERM
并没有设置。
fgRed=$(tput setaf 1) ; fgGreen=$(tput setaf 2) ; fgBlue=$(tput setaf 4)
fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6)
fgWhite=$(tput setaf 7) ; fgBlack=$(tput setaf 0)
bgRed=$(tput setab 1) ; bgGreen=$(tput setab 2) ; bgBlue=$(tput setab 4)
bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6)
bgWhite=$(tput setab 7) ; bgBlack=$(tput setab 0)
更新的问题:我该如何解决这个问题?我应该自己设置吗?或者如果没有设置,$TERM
我是否应该不设置这些变量?$TERM
更新2
我尝试过的一个解决方案是检查是否$TERM
已设置。但这似乎不起作用;我仍然收到相同的错误消息。以下是代码:
if [ ! "$TERM" = "" ]; then
#Do stuff here
fi
显然$TERM
曾是设置,但tput
仍然得出结论不是。
答案1
最终对我有用的是检查 shell 是否是交互式 shell。我根据 unix.stackexchange 上的另一篇文章找到了解决方案:如何检查 shell 是否为登录/交互/批处理。
因此解决方案的代码是:
if [[ $- == *i* ]]; then
fgRed=$(tput setaf 1) ; fgGreen=$(tput setaf 2) ; fgBlue=$(tput setaf 4)
fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6)
fgWhite=$(tput setaf 7) ; fgBlack=$(tput setaf 0)
bgRed=$(tput setab 1) ; bgGreen=$(tput setab 2) ; bgBlue=$(tput setab 4)
bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6)
bgWhite=$(tput setab 7) ; bgBlack=$(tput setab 0)
fi
答案2
如果你这样做
if tty -s
then
: # your tput commands
fi
它将解决您的问题。如果没有 -s 选项,tty 将显示您的 tty 或显示“不是 tty”
答案3
对我来说,添加
export TERM=xterm
是/etc/profile
解决问题的唯一办法。实际上,错误给了我们一个提示:No value for $TERM
答案4
尝试打开终端(无论哪个,即使是 tty1 也可以)并运行此行
sudo update-alternatives --config x-terminal-emulator
您将可以选择 x window 的默认终端仿真器。通过选择数字选择一个,完成后重新启动。
$ sudo update-alternatives --config x-terminal-emulator
有 6 种替代 x-terminal-emulator 选择(提供 /usr/bin/x-terminal-emulator)。
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gnome-terminal.wrapper 40 auto mode
1 /usr/bin/gnome-terminal.wrapper 40 manual mode
2 /usr/bin/koi8rxterm 20 manual mode
* 3 /usr/bin/lxterm 30 manual mode
4 /usr/bin/sakura 40 manual mode
5 /usr/bin/uxterm 20 manual mode
6 /usr/bin/xterm 20 manual mode
Press enter to keep the current choice[*], or type selection number: