Назад | Перейти на главную страницу

Подсказка настройки: как определить отсутствие 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

Таким образом, переменная $ 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