$TERM 没有值,也没有指定 -T

Sil*_*eth 23 lubuntu kubuntu

我最近升级了(使用apt-get dist-upgrade)我的 Kubuntu 和 Lubuntu Linux 机器,现在每次登录其中一台机器时,我都会收到以下消息:

tput: No value for $TERM and no -T specified
Run Code Online (Sandbox Code Playgroud)

这是确切消息的屏幕截图: tput:没有 $TERM 的值,也没有指定 -T

我的 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)

  • 如果这是在`.bashrc` 中,我觉得很奇怪。默认的`.bashrc` 包含: `# 如果不是交互式运行,什么都不做` `case $- in *i*) ;; *) return;;`,因此除非交互式,否则不应应用您的设置。 (2认同)

小智 10

如果你这样做

if tty -s
then
    : # your tput commands
fi
Run Code Online (Sandbox Code Playgroud)

它会解决你的问题。如果没有 -s 选项,tty 将显示您的 tty 或写“not a tty”


jjm*_*elo 8

对我来说,添加

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 的其他值也是可能的。