提示自定义:如何检测什么时候没有tty

我有一个颜色自定义的提示(使用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