Недавно я обновил (с apt-get dist-upgrade) мои блоки Kubuntu и Lubuntu Linux, и теперь каждый раз, когда я вхожу на одну из этих машин, я получаю это сообщение:
tput: No value for $TERM and no -T specified
Вот скриншот точного сообщения:
Это произошло как на моей машине Lubuntu, так и на машине Kubuntu, и это не было проблемой, пока я не обновился; поэтому я подозреваю, что это была не ошибка пользователя.
Как я могу это исправить?
каждый раз
Я отслеживал это вплоть до моего .bashrc-файла, который вызывается моим файлом .profile. Хотя, тот факт, что мой .bashrc-файл теперь работает, когда я делаю вход в GUI, тогда как он не до того, как я обновился, немного странно. И нет, я еще не модифицировал мой файл .bashrc или мой .profile. Кроме того, bash не является моей оболочкой по умолчанию.
Проблема заключается в том, что я вызываю tput в мой .bashrc-файл, чтобы настроить переменные для использования при добавлении цвета в приглашение. Но в (неуместное) время, когда теперь запускается мой .bashrc-файл, $TERM не установлен.
fgRed=$(tput setaf 1) ; fgGreen=$(tput setaf 2) ; fgBlue=$(tput setaf 4)
fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6)
fgWhite=$(tput setaf 7) ; fgBlack=$(tput setaf 0)
bgRed=$(tput setab 1) ; bgGreen=$(tput setab 2) ; bgBlue=$(tput setab 4)
bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6)
bgWhite=$(tput setab 7) ; bgBlack=$(tput setab 0)
Обновленный вопрос: как мне исправить это? Должен ли я установить $TERM самостоятельно? Или я должен просто не устанавливать эти переменные, если $TERM не задан?
Обновленный вопрос:
Одно из решений, которое я пытался проверить, было $TERM был установлен. Но это, похоже, не сработало; У меня все еще такое же сообщение об ошибке. Вот код:
if [ ! "$TERM" = "" ]; then
#Do stuff here
fi
Так что, видимо, $TERM был установлен, но tput все еще заключил, что это не так.
Если вы сделаете это
if tty -s
then
: # your tput commands
fi
, это устранит вашу проблему. Без опции -s tty либо отобразит ваш tty, либо напишет «not tty»
Попробуйте открыть терминал (неважно, какой из них будет выполняться даже tty1) и запустите эту строку
sudo update-alternatives --config x-terminal-emulator
Вам будет предоставлен выбор эмулятора терминала по умолчанию для окна x. Выбираем один, выбирая номер и перезагружаясь после того, как вы закончите.
$ sudo update-alternatives --config x-terminal-emulator Существует 6 вариантов альтернативного эмулятора x-terminal (предоставление / usr /bin/x-terminal-emulator).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gnome-terminal.wrapper 40 auto mode
1 /usr/bin/gnome-terminal.wrapper 40 manual mode
2 /usr/bin/koi8rxterm 20 manual mode
* 3 /usr/bin/lxterm 30 manual mode
4 /usr/bin/sakura 40 manual mode
5 /usr/bin/uxterm 20 manual mode
6 /usr/bin/xterm 20 manual mode
Press enter to keep the current choice[*], or type selection number:
Для меня, добавив
export TERM=xterm
to /etc/profile, было единственное, что разрешило проблему. На самом деле ошибка дала нам подсказку: No value for $TERM
[Другой сценарий, но поисковая система сначала меня сюда]
Когда « В другом сценарии, но поисковая система сначала меня сюда] « Ошибка в контейнере Docker ( для меня при открытии оболочки zsh, вызывающей docker exec -it <container> zsh (-i для интерактивного)), единственный способ исправить это - это установить переменную типа ENV TERM xterm-256color в файле Docker для этого изображения.
Подходы, такие как RUN export TERM=xterm-256color или RUN echo "export TERM=xterm-256color" >> ~/.zshrc, не были успешными. Возможны и другие значения для TERM.
Диалоговое окно ошибки связано с исправлением ошибки # 678421, так что это моя ошибка. ;) Он сообщает вам об ошибках из-за некоторых команд (ов) в одном из ваших файлов конфигурации. Если вы прокрутите вверх, вы увидите, какой файл вызывает сообщения об ошибках.
Возможно, ответа Серга достаточно, чтобы избавиться от диалогового окна предупреждения.
Изменить: [!d3 ]
Хотел бы добавить пару вещей из-за обновленного вопроса.
В отличие от ранее, /usr/sbin/lightdm-session теперь выполняется под bash (ранее sh). Вот почему его источник ~/.profile приводит к ~/.profile источнику ~/.bashrc. Возможно, это означает, что должно быть изменено содержимое по умолчанию ~/.profile.
Самое простое, что вы можете сделать, чтобы исправить это, как вы сказали, только для вызова tput, если задано $ TERM.