错误" tput $ TERM没有值,没有-T指定"

时间:2018-01-31 07:32:07

标签: sh tput

我在服务器A中有一个shell脚本,我在服务器B中有一个shell脚本。 我的逻辑就像A脚本中的shell脚本一样被执行,它在服务器B中调用shell脚本并执行它。 当A执行B时,我能够获得所需的结果,但同时也会得到错误结果。错误消息:

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

我使用以下行来获取颜色输出;

  RED=`tput setaf 1`
  GREEN=`tput setaf 2`
  YELLOW=`tput setaf 3`
  BLUE=`tput setaf 6`
  BOLD=`tput bold`
  RESET=`tput sgr0`

这些行在A和B的shell脚本中都可用。 当我通过登录服务器B在B中执行shell脚本时,所需的输出随颜色一起出现。 当我从A调用shell脚本并执行它时,我得到了所需的结果以及我上面提到的错误消息。

你能在这方面提供帮助吗?

仅供参考,我检查了"echo $TERM"并在两台服务器中输出'xterm'

不确定我哪里出错了。

4 个答案:

答案 0 :(得分:0)

我们假设两个服务器中的shell或环境设置不同,如果可能,您可以从两个服务器输出下一个命令。

ps

此命令可帮助我们了解我们正在使用的shell类型。

env

此命令可帮助我们了解环境。

答案 1 :(得分:0)

通过脚本登录时,将取消设置

$TERM。在此方案中绕过颜色编码,或将选项硬编码为tput。 (我强烈建议前者。)

RED=; GREEN=; YELLOW=; BLUE=; BOLD=; RESET=; 
case ${TERM} in
  '') ;;
  *)
      RED=`tput setaf 1`
      GREEN=`tput setaf 2`
      YELLOW=`tput setaf 3`
      BLUE=`tput setaf 6`
      BOLD=`tput bold`
      RESET=`tput sgr0`;;
esac

答案 2 :(得分:0)

我现在能够成功解决问题。

ssh <Server B> "TERM=xterm" <script in ServerB>

所需的输出以颜色返回ServerA。

答案 3 :(得分:0)


--> 我针对 TPUT 问题的工作解决方案:


# when $TERM is empty (non-interactive shell), then expand tput with '-T xterm-256color'
[[ ${TERM}=="" ]] && TPUTTERM='-T xterm-256color' \
                  || TPUTTERM=''

declare -r    RES='tput${TPUTTERM} sgr0'       REV='tput${TPUTTERM} rev'
declare -r    fRD='tput${TPUTTERM} setaf 1'    bRD='tput${TPUTTERM} setab 1'
declare -r    fGN='tput${TPUTTERM} setaf 2'    bGN='tput${TPUTTERM} setab 2'
...
echo ${fRD}" RED Message: ${REV} This message is RED REVERSE. "${RES}
echo ${fGN}" GREEN Message: ${REV} This message is GREEN REVERSE. "${RES}
...

这样一来,无论是交互式还是非交互式 shell,都没有任何意义 - tput 仍然可以正常工作。

6a5h4