我有一个颜色自定义的提示(使用tput),每当我在服务器中启动一个非交互式会话时,我都会遇到一堆错误。
例如,如果我开始这样一个非交互式会话:
ssh root@hostname6 "echo 'hello' ; echo $TERM"
我得到的输出是:
hello xterm tput: No value for $TERM and no -T specified tput: No value for $TERM and no -T specified tput: No value for $TERM and no -T specified tput: No value for $TERM and no -T specified tput: No value for $TERM and no -T specified tput: No value for $TERM and no -T specified tput: No value for $TERM and no -T specified stdin: is not a tty
所以即使会话是非交互式的,$ TERMvariables也有一个值。
我必须检测什么条件,以便在启动非交互式shell时提示定制部分被忽略?
tput
命令在赋值给PS1时被评估。 由于启动文件是在ssh会话启动时处理的,因此即使您的会话不是交互式,也会进行分配。 你可以testing,只有在你开始交互式会话的时候才能进行分配。
if [[ $- =~ i ]] then # set PS1 using tput else # set a plain PS1 (or use hard-coded escape sequences) fi
TTY有一个bash内置testing。 我忘了什么时候join,3.0? 我相信这是相对较新的。 我在脚本中使用它,当它从cron运行或用户直接运行时,需要不同的行为。
if [ -t 0 ]; then echo "I'm a TTY" fi
把以下放在/ etc / bashrc的开头
[ -z "$PS1" ] && return
这里是所有3种方法的描述:
http://tldp.org/LDP/abs/html/intandnonint.html