没有 $TERM 的值并且没有指定 -T

没有 $TERM 的值并且没有指定 -T

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

tput: No value for $TERM and no -T specified

以下是该消息的具体截图: tput:没有 $TERM 的值并且没有指定 -T

这在我的 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:  

相关内容