У меня есть настраиваемая подсказка с цветами (с использованием 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
Таким образом, переменная $ TERM имеет значение, даже если сеанс не интерактивен.
Какое условие мне нужно определить, чтобы при запуске неинтерактивной оболочки опускалась часть настройки подсказки?
Есть встроенный тест bash для TTY. Я забыл когда добавили 3.0? Я считаю, что это относительно недавно. Я использую его в скриптах, где мне нужно другое поведение, когда он запускается из cron или пользователь запускает его напрямую.
if [ -t 0 ]; then
echo "I'm a TTY"
fi
Поместите следующее в начало / etc / bashrc
[ -z "$PS1" ] && return
Вот описание всех трех способов сделать это:
http://tldp.org/LDP/abs/html/intandnonint.html
В tput
Команды оцениваются во время присвоения PS1. Поскольку файлы запуска обрабатываются при запуске сеанса ssh, назначение выполняется, даже если ваш сеанс не является интерактивным. Вы можете проверить это и выполнять задание только тогда, когда фактически начинаете интерактивный сеанс.
if [[ $- =~ i ]]
then
# set PS1 using tput
else
# set a plain PS1 (or use hard-coded escape sequences)
fi