我最近升级了(使用apt-get dist-upgrade)我的 Kubuntu 和 Lubuntu Linux 机器,现在每次登录其中一台机器时,我都会收到以下消息:
tput: No value for $TERM and no -T specified
Run Code Online (Sandbox Code Playgroud)
这是确切消息的屏幕截图:

我的 Lubuntu 机器和 Kubuntu 机器上都发生了这种情况,直到我升级后才出现问题;所以我怀疑这不是用户错误。
我怎样才能解决这个问题?
更新
我已将其追溯到我的 .bashrc 文件,该文件由我的 .profile 文件调用。尽管如此,我的 .bashrc 文件现在在我进行 GUI 登录时运行而我升级之前没有的事实有点奇怪。不,我最近没有修改我的 .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)
Run Code Online (Sandbox Code Playgroud)
更新的问题:我应该如何解决这个问题?我应该自己定$TERM吗?或者如果$TERM没有设置,我应该不设置这些变量吗?
更新 2
我尝试的一种解决方案是检查是否$TERM已设置。但这似乎不起作用;我仍然收到相同的错误消息。这是代码:
if [ ! "$TERM" = "" ]; then
#Do stuff here
fi
Run Code Online (Sandbox Code Playgroud)
所以显然$TERM 已经确定,但tput仍然得出结论它不是。
Sil*_*eth 15
最终对我有用的是检查 shell 是否是交互式 shell。我的解决方案基于 unix.stackexchange 上的另一篇文章:How to check a shell is login/interactive/batch。
所以解决方案的代码是:
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
Run Code Online (Sandbox Code Playgroud)
小智 10
如果你这样做
if tty -s
then
: # your tput commands
fi
Run Code Online (Sandbox Code Playgroud)
它会解决你的问题。如果没有 -s 选项,tty 将显示您的 tty 或写“not a tty”
对我来说,添加
export TERM=xterm
Run Code Online (Sandbox Code Playgroud)
to/etc/profile是解决问题的唯一方法。实际上,错误给了我们一个提示:No value for $TERM
小智 5
[不同的场景,但搜索引擎首先引导我到这里]
当Docker容器中出现“ tput: No value for $TERM and no -T specified ”错误时(对我来说,当打开zsh shell 调用(-i 表示交互式)时)解决此问题的唯一方法是设置变量就像这个镜像的 Dockerfile 中一样。docker exec -it <container> zshENV TERM xterm-256color
RUN export TERM=xterm-256color 诸如或 之类的方法RUN echo "export TERM=xterm-256color" >> ~/.zshrc都没有成功。TERM 的其他值也是可能的。
| 归档时间: |
|
| 查看次数: |
26541 次 |
| 最近记录: |