我在服务器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'
。
不确定我哪里出错了。
答案 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)
# 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