Я недавно обновил (с помощью apt-get dist-upgrade
) свои Kubuntu и Lubuntu Linux, и теперь каждый раз, когда я захожу на одну из этих машин, я получаю следующее сообщение:
tput: No value for $TERM and no -T specified
Вот скриншот точного сообщения:
Это происходило как на моей машине Lubuntu, так и на машине Kubuntu, и это не было проблемой, пока я не обновился; поэтому я подозреваю, что это была не ошибка пользователя.
Как я могу это исправить?
ОБНОВИТЬ
Я отследил это до моего файла .bashrc, который вызывается моим файлом .profile. Хотя тот факт, что мой файл .bashrc теперь запускается, когда я делаю вход в систему с графическим интерфейсом, в то время как это было до обновления, немного странно. И нет, я недавно не модифицировал ни мой файл .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
не установлен?
ОБНОВЛЕНИЕ 2
Одно из решений, которое я попробовал, состояло в том, чтобы проверить, $TERM
было ли установлено. Но это не сработало; Я все еще получил то же сообщение об ошибке. Вот код:
if [ ! "$TERM" = "" ]; then
#Do stuff here
fi
Таким образом, очевидно, $TERM
был установлен, но tput
все же пришел к выводу, что это не так
.profile
запускается независимо от оболочки по умолчаниюОтветы:
В конечном итоге мне удалось проверить, была ли оболочка интерактивной. Я основал решение на этом другом посте в unix.stackexchange: Как проверить, является ли оболочка логином / интерактивной / пакетной .
Итак, код для решения был:
источник
.bashrc
, я нахожу это удивительным. Значение по умолчанию.bashrc
содержит:,# If not running interactively, don't do anything
case $- in *i*) ;; *) return;;
поэтому ваши настройки не должны применяться, если они не являются интерактивными..bashrc
?[[ $- == *i* ]] || return
Ref: ( askubuntu.com/a/1070182/362122 )Если вы делаете это
Это исправит вашу проблему. Без опции -s tty покажет ваш tty или напишет "не tty"
источник
tty
со страницы руководства - «распечатать имя файла терминала, подключенного к стандартному вводу». Если stdin вашего скрипта является конвейером, этот тест не пройден, в результате чего ваша программа прекращает печатать цвета в своем выводе только потому, что его ввод поступает из конвейера. Может бытьtest -t 1
(по-английски: "подключен ли stdout к терминалу?"), Что вы действительно хотите? Таким образом, вы получаете цвета только в том случае, если вывод идет на терминал, и вы не увидите странных кодов терминала, если перенаправите его вывод в файл или передадите, скажем, через негоless
.Для меня добавление
чтобы
/etc/profile
были единственным , что решить эту проблему. Собственно, ошибка подсказала нам:No value for $TERM
источник
[ Другой сценарий, но поисковая система привела меня сюда сначала]
Когда в контейнере Docker возникает ошибка « tput: нет значения для $ TERM и не указан -T » (для меня при открытии оболочки zsh (-i для интерактивного)) единственный способ исправить это - установить переменную как в Dockerfile для этого изображения.
docker exec -it <container> zsh
ENV TERM xterm-256color
Подходы вроде
RUN export TERM=xterm-256color
илиRUN echo "export TERM=xterm-256color" >> ~/.zshrc
не увенчались успехом. Другие значения для TERM также возможны.источник
Попробуйте открыть терминал (не имеет значения, что подойдет даже tty1) и запустите эту строку
sudo update-alternatives --config x-terminal-emulator
Вам будет представлен выбор эмулятора терминала по умолчанию для окна x. Выберите один, выбрав номер, и перезагрузите компьютер после завершения.
$ sudo update-alternatives --config x-терминал-эмулятор
Существует 6 вариантов альтернативного x-терминал-эмулятора (предоставляя / usr / bin / x-терминал-эмулятор).
источник
gnome-terminal
илиsakura
sakura
. Однако, это, похоже, проблема с оболочкой терминала gnome; если так, то почему бы не исправить это?Диалог ошибки связан с исправлением ошибки # 678421 , поэтому я виноват. ;) Он сообщает вам об ошибках из-за некоторых команд в одном из ваших файлов конфигурации. Если вы прокрутите вверх, вы увидите, какой файл вызывает сообщения об ошибках.
Возможно, ответа Серга достаточно, чтобы избавиться от предупреждающего диалога.
Редактировать:
Хотелось бы добавить пару вещей в связи с обновленным вопросом.
В отличие от ранее,
/usr/sbin/lightdm-session
теперь запускается под Bash (ранее Sh). Вот почему его поиск~/.profile
результатов в~/.profile
поиске~/.bashrc
. Возможно, это означает, что содержимое по умолчанию~/.profile
должно быть изменено.Самое простое, что вы можете сделать, чтобы исправить это, как вы предложили, это вызывать tput, только если установлена переменная $ TERM.
источник