I have a customized prompt with colors (using tput) and every time I start a non-interactive session in the server I get a bunch of errors.
For instance if I start a non-interactive session like this:
ssh root@hostname6 "echo 'hello' ; echo $TERM"
The output I get is:
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
So the $TERM variable has a value even when the session is non-interactive.
What condition do I have to detect so that when I start a non-interactive shell the prompt customization part is omited??
There's a bash built-in test for TTY. I forget when it was added, 3.0? I believe it's relatively new. I use it in scripts where I need different behavior when it's run from cron or a user runs it directly.
Put the following at the beginning of /etc/bashrc
Here is a description of all 3 methods of doing this:
http://tldp.org/LDP/abs/html/intandnonint.html
The
tput
commands are evaluated at the time that the assignment to PS1 is made. Since the startup files are processed when an ssh session is started, the assignment is made even though your session is not interactive. You can test for that and only make your assignment when you are actually starting an interactive session.