Saya baru-baru ini meningkatkan (dengan apt-get dist-upgrade
) kotak Kubuntu dan Lubuntu Linux saya, dan sekarang setiap kali saya masuk ke salah satu mesin ini, saya mendapatkan pesan ini:
tput: No value for $TERM and no -T specified
Ini adalah tangkapan layar dari pesan yang tepat:
Ini terjadi pada mesin Lubuntu saya dan mesin Kubuntu, dan itu tidak masalah sampai setelah saya memutakhirkan; jadi saya curiga itu bukan kesalahan pengguna.
Bagaimana saya bisa memperbaikinya?
MEMPERBARUI
Saya telah melacak ini ke file .bashrc saya, yang dipanggil oleh file .profile saya. Padahal, fakta bahwa file .bashrc saya sekarang berjalan ketika saya melakukan login GUI padahal tidak sebelum saya upgrade agak aneh. Dan tidak, saya belum mengubah file .bashrc saya atau .profile saya baru-baru ini. Juga, bash bukan shell default saya.
Masalahnya adalah bahwa saya memanggil tput
file .bashrc saya untuk mengatur variabel untuk digunakan dalam menambahkan warna ke prompt. Tetapi pada saat (tidak pantas) saat file .bashrc saya dijalankan, $TERM
belum disetel.
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)
Pertanyaan yang diperbarui: Bagaimana saya harus memperbaikinya? Haruskah saya mengatur $TERM
diri saya sendiri? Atau haruskah saya tidak mengatur variabel-variabel ini jika $TERM
tidak disetel?
PEMBARUAN 2
Satu solusi yang saya coba adalah memeriksa apakah $TERM
sudah disetel. Tapi ini sepertinya tidak berhasil; Saya masih mendapat pesan kesalahan yang sama. Ini kodenya:
if [ ! "$TERM" = "" ]; then
#Do stuff here
fi
Jadi tampaknya $TERM
sudah diatur, tetapi tput
masih menyimpulkan itu tidak.
.profile
berjalan terlepas dari shell defaultJawaban:
Apa yang akhirnya berhasil bagi saya adalah untuk memeriksa apakah shell itu shell interaktif. Saya mendasarkan solusi pada posting lain ini di unix.stackexchange: Cara memeriksa apakah shell masuk / interaktif / batch .
Jadi kode untuk solusinya adalah:
sumber
.bashrc
, saya merasa mengejutkan. Defaultnya.bashrc
berisi:,# If not running interactively, don't do anything
case $- in *i*) ;; *) return;;
jadi pengaturan Anda tidak boleh diterapkan kecuali interaktif..bashrc
?[[ $- == *i* ]] || return
Ref: ( askubuntu.com/a/1070182/362122 )Jika kamu melakukan ini
Ini akan memperbaiki masalah Anda. Tanpa opsi -s tty akan menampilkan tty Anda atau menulis "not a tty"
sumber
tty
dari yang halaman pengguna adalah "mencetak nama file dari terminal terhubung ke input standar." Jika stdin dari skrip Anda adalah sebuah pipa, tes ini akan gagal, dengan konsekuensi program Anda berhenti mencetak warna dalam outputnya hanya karena inputnya berasal dari sebuah pipa. Mungkintest -t 1
(dalam bahasa Inggris: "apakah stdout terhubung ke terminal?") Adalah apa yang Anda inginkan? Dengan cara itu Anda mendapatkan warna hanya jika output pergi ke terminal, dan Anda tidak akan melihat kode terminal aneh jika Anda mengarahkan outputnya ke file atau pipa melalui, katakanlahless
,.Bagi saya, menambahkan
untuk
/etc/profile
satu-satunya hal yang memecahkan masalah. Sebenarnya, kesalahan memberi kami petunjuk:No value for $TERM
sumber
[ Skenario berbeda, tapi mesin pencari membawaku ke sini dulu]
Ketika " tput: Tidak ada nilai untuk $ TERM dan tidak ditentukan -T " kesalahan terjadi dalam wadah Docker (bagi saya, ketika membuka panggilan shell zsh
docker exec -it <container> zsh
(-i untuk interaktif)) satu-satunya cara untuk memperbaikinya, adalah dengan mengatur variabel sepertiENV TERM xterm-256color
di Dockerfile untuk gambar ini.Pendekatan suka
RUN export TERM=xterm-256color
atauRUN echo "export TERM=xterm-256color" >> ~/.zshrc
tidak berhasil. Nilai lain untuk JANGKA juga dimungkinkan.sumber
Coba buka terminal (tidak masalah yang mana, bahkan tty1 akan melakukannya) dan jalankan baris ini
sudo update-alternatives --config x-terminal-emulator
Anda akan diberikan pilihan emulator terminal default untuk x window. Pilih satu dengan memilih nomor, dan reboot setelah selesai.
$ sudo update-alternative --config x-terminal-emulator
Ada 6 pilihan untuk alternatif x-terminal-emulator (menyediakan / usr / bin / x-terminal-emulator).
sumber
gnome-terminal
atausakura
sakura
. Namun, ini tampaknya menjadi masalah dengan pembungkus terminal gnome; jika demikian, mengapa tidak memperbaikinya?Dialog kesalahan ini disebabkan oleh perbaikan bug # 678421 , jadi ini salah saya. ;) Ini memberi tahu Anda tentang kesalahan karena beberapa perintah di salah satu file konfigurasi Anda. Jika Anda menggulir ke atas, Anda dapat melihat file mana yang menyebabkan pesan kesalahan.
Kemungkinan jawaban Serg cukup untuk menyingkirkan dialog peringatan.
Edit:
Ingin menambahkan beberapa hal karena pertanyaan yang diperbarui.
Tidak seperti sebelumnya,
/usr/sbin/lightdm-session
sekarang dijalankan di bawah bash (sebelumnya sh). Itu sebabnya sumbernya~/.profile
hasil dalam~/.profile
sumber~/.bashrc
. Mungkin ini berarti bahwa konten default~/.profile
harus diubah.Hal termudah yang dapat Anda lakukan untuk memperbaikinya adalah, seperti yang Anda sarankan, untuk hanya memanggil tput jika $ TERM sudah disetel.
sumber