Я недавно обновил (с apt-get dist-upgrade
) мои поля Kubuntu и Lubuntu Linux, и теперь каждый раз, когда я вхожу в одну из этих машин, я получаю это сообщение:
tput: No value for $TERM and no -T specified
Вот снимок экрана точного сообщения:
Это произошло и на моей машине Lubuntu и на машине Kubuntu, и это не была проблема, пока я не обновил; таким образом, я подозреваю, что это не была пользовательская ошибка.
Как я могу зафиксировать это?
ОБНОВЛЕНИЕ
Я разыскал это в свой .bashrc файл, который становится названным моим .profile файлом. Хотя, то, что мой .bashrc файл теперь работает, когда я делаю вход в систему GUI, тогда как он не сделал, прежде чем я обновил, является немного странным. И не, я недавно не изменил свой .bashrc файл или свой .profile. Кроме того, удар не является моей оболочкой по умолчанию.
Проблема состоит в том, что я звоню 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
не установлен?
ОБНОВЛЕНИЕ 2
Одно решение, которое я попробовал, состояло в том, чтобы проверить ли $TERM
был установлен. Но это, казалось, не работало; я все еще получил то же сообщение об ошибке. Вот код:
if [ ! "$TERM" = "" ]; then
#Do stuff here
fi
Так, по-видимому, $TERM
был установлен, но tput
все еще завершенный это не было.
То, что в конечном счете работало на меня, должно было проверить, была ли оболочка интерактивной оболочкой. Я основывал решение на этом другом сообщении в unix.stackexchange: , Как проверить, является ли оболочка входом в систему/интерактивным/пакетом .
, Таким образом, код для решения был:
if [[ $- == *i* ]]; then
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)
fi
Если Вы сделаете это
if tty -s
then
: # your tput commands
fi
, то Это решит Вашу проблему. Без-s опции tty или отобразит Ваш tty или запишет "не tty"
Для меня, добавляя
export TERM=xterm
к /etc/profile
была единственная вещь, которая решила проблему. На самом деле ошибка дала нам подсказку: No value for $TERM
Попробуйте вводный терминал (не имеет значения, который, даже tty1 сделает), и выполните эту строку
sudo update-alternatives --config x-terminal-emulator
, Вам подарят выбор эмулятора терминала по умолчанию для X-окна. Выберите один путем выбора числа и перезагрузки после того, как Вы будете сделаны.
$ sudo альтернативы обновления - конфигурируют x-эмулятор-терминала
существует 6 вариантов для альтернативного x-эмулятора-терминала (обеспечение/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:
[ Другой сценарий, но поисковая система приводит меня сюда сначала]
Когда" tput: Никакое значение за $TERM и никакой-T, указанный " ошибка, не происходят в Докер контейнер (для меня, при открытии , оболочка zsh, звоня docker exec -it <container> zsh
(-i для интерактивного)) единственный способ зафиксировать это, должен был установить переменную как ENV TERM xterm-256color
в Dockerfile для этого изображения.
Подходы как RUN export TERM=xterm-256color
или RUN echo "export TERM=xterm-256color" >> ~/.zshrc
не были успешны. Другие значения для ТЕРМИНА также возможны.
Ошибочное диалоговое окно происходит из-за фиксации ошибка № 678421 , таким образом, это - мой отказ.;) Это говорит Вам об ошибках из-за некоторой команды (команд) в одном из Ваших конфигурационных файлов. Если Вы прокручиваете к вершине, Вы видите, какой файл вызывает сообщения об ошибках.
Возможно ответ Serg достаточен для избавлений от диалогового окна предупреждения.
Редактирование:
хотел бы добавить несколько вещей из-за обновленного вопроса.
, В отличие от этого, прежде, /usr/sbin/lightdm-session
теперь выполняется под ударом (ранее sh). Вот почему его определение источника ~/.profile
результаты в ~/.profile
определение источника ~/.bashrc
. Возможно это означает, что содержание по умолчанию ~/.profile
должно быть изменено.
самая легкая вещь можно сделать для фиксации его, как Вы предположили, чтобы только назвать tput, если $TERM установлен.