$ TERM için değer yok ve belirtilmemiş


22

Geçenlerde apt-get dist-upgradeKubuntu ve Lubuntu Linux kutularımı yükselttim ( şimdi) ve bu makinelerden birine her giriş yaptığımda şu mesajı alıyorum:

tput: No value for $TERM and no -T specified

İşte tam mesajın bir ekran görüntüsü: tput: $ TERM için değer yok ve belirtilmemiş

Bu hem Lubuntu makinemde hem de Kubuntu makinemde oldu ve yükseltme yapana kadar sorun olmadı; bu yüzden kullanıcı hatası olmadığını düşünüyorum.

Bunu nasıl düzeltebilirim?

GÜNCELLEŞTİRME

Bunu, .profile dosyam tarafından çağrılan .bashrc dosyama kadar izledim. Gerçi, .bashrc dosyamın şu anda bir GUI girişi yaptığım zaman çalıştığı gerçeği, gerçekte yükseltmeden önce yapmadığı biraz garip. Ve hayır, son zamanlarda .bashrc dosyamı veya .profile dosyamı değiştirmedim. Ayrıca, bash benim varsayılan kabuğum değil.

Sorun şu ki tput, istemime renk eklemek için değişkenleri ayarlamak üzere .bashrc dosyamı arıyorum . Ancak .bashrc dosyamın şimdi çalıştırıldığı (uygun olmayan) zamanda $TERMayarlanmadı.

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)

Güncellenmiş soru: Bunu nasıl düzeltmeliyim? $TERMKendimi ayarlamalı mıyım ? Yoksa ayarlanmamışsa bu değişkenleri $TERMayarlamamalı mıyım?

GÜNCELLEME 2

Denediğim bir çözüm, kurulup kurulmadığını kontrol $TERMetmekti. Ancak bu işe yaramadı; Hala aynı hata mesajını aldım. İşte kod:

if [ ! "$TERM" = "" ]; then
  #Do stuff here
fi

Yani görünüşte $TERM edildi ayarlayabilirsiniz, ancak tputyine de bu değildi sonucuna vardı.


1
Yanılmıyorsam .profilevarsayılan kabuğu ne olursa olsun çalışır
Sergiy Kolodyazhnyy

@Ser ama bir GUI kabuk girişi sırasında? Ayrıca, her zaman bu sorunu görmedim.
Sildoreth

Evet, kullanıcı oturum açması üzerine çalıştırılmış olmalı ve bu tam olarak yaptığınız şeydi
Sergiy Kolodyazhnyy

Yanıtlar:


13

Sonunda benim için çalışan, kabuğun etkileşimli bir kabuk olup olmadığını kontrol etmekti. Çözümü, unix.stackexchange adresindeki bu diğer yazıya dayandırdım: Bir kabuğun login / interaktif / toplu olup olmadığının kontrolü .

Yani çözümün kodu şuydu:

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

Aha, bu zarif bir çözüm. :)
Gunnar Hjalmarsson

2
Bu .bashrciçeride, şaşırtıcı buluyorum. Varsayılan .bashrciçerik şunları içerir: # If not running interactively, don't do anything case $- in *i*) ;; *) return;;bu nedenle, etkileşimli olmadığı sürece ayarlarınızın uygulanmaması gerekir.
muru

@muru Benim .bashrc dosyam varsayılan değil. :)
Sildoreth

Ama bunu nerede yaptın? içinde .bashrcmi
jjmerelo

Sanırım bunu dosyanızın en üstüne koyarsanız daha temiz: [[ $- == *i* ]] || returnRef: ( askubuntu.com/a/1070182/362122 )
Klik

9

Eğer bunu yaparsan

if tty -s
then
    : # your tput commands
fi

Sorunu çözecek. -S seçeneği olmadan tty, tty'nizi görüntüler veya "tty değil" yazar.


Açıklaması ttyonun gelen manuel sayfa "standart girişe bağlı terminalin dosya adını yazdırmak" dir. Komut dosyanızın dizgesi bir boru ise, bu test başarısız olur; bunun sonucunda programınız renklerini çıktılarında yazdırmayı durdurur, çünkü girişi bir borudan geliyor. Belki test -t 1(İngilizce: "stdout bir terminale bağlı mı?") Gerçekten ne istiyorsun? Bu şekilde, yalnızca çıktı bir terminale giderse renkler elde edersiniz ve çıktıyı bir dosyaya yönlendirirseniz ya da içinden geçirirseniz garip terminal kodları görmezsiniz less.
TheDudeAbides

6

Benim için ekleyerek

export TERM=xterm

için /etc/profilesorunu çözdü tek şeydi. Aslında, hata bize bir ipucu verdi:No value for $TERM


4

[ Farklı senaryo, ancak arama motoru önce beni buraya yönlendirir]

Docker kapsayıcısında " tput: $ TERM değeri yok ve -T belirtilmedi " hatası oluştuğunda (benim için, bir zsh kabuğunu açarken (-i etkileşimli)) bunu düzeltmenin tek yolu değişkeni ayarlamaktı. Bu görüntü için Dockerfile'daki gibi .docker exec -it <container> zshENV TERM xterm-256color

Gibi yaklaşımlar RUN export TERM=xterm-256color veya RUN echo "export TERM=xterm-256color" >> ~/.zshrcbaşarılı değildi. TERM için başka değerler de mümkündür.


3

Terminali açmayı deneyin (hangisinin, hatta tty1'in yapacağı önemli değil) ve bu satırı çalıştırın

sudo update-alternatives --config x-terminal-emulator

X penceresi için varsayılan terminal emülatörü seçeneği sunulur. Bir numara seçerek birini seçin ve tamamladıktan sonra yeniden başlatın.

$ sudo güncelleme alternatifleri --config x-terminal-emulator Alternatif x-terminal-emulator
için 6 seçenek vardır (/ usr / bin / x-terminal-emulator sağlar).

  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:  

Bunu denediğimde, bana "x-terminal-emulator link grubunda sadece bir alternatif var [...] Yapılandırılacak bir şey yok" diyor. Bu benim Kubuntu makinemde.
Sildoreth

Örneğin başka bir terminal emülatörü kurmayı deneyin gnome-terminalveyasakura
Sergiy Kolodyazhnyy

Ben tam olarak aynı problem vardı. Ben seçmiş sakura. Ancak, bu gnome terminal sargısında bir sorun gibi görünüyor; öyleyse, neden bunu düzeltmedin?
jjmerelo

Aslında sorunu çözmüyor.
jjmerelo

2
@jjmerelo OP'nin cevabında daha sonra açıkladığı gibi .bashrc dosyasında hatalar veren satırları vardı. GNOME terminal sarmalayıcısı sorun olmamalıdır. Tahminime göre başlangıçta $ TERM değişkeni ayarlanmadı, bu da cevabında başka bir kullanıcı olan Gunnar idi.
Sergiy Kolodyazhnyy

1

Hata iletişim kutusu # 678421 numaralı hatanın düzeltmesinden kaynaklanmaktadır , bu yüzden bu benim hatam. ;) Yapılandırma dosyalarınızdan birindeki bazı komutlardan kaynaklanan hataları size bildirir. Başa ilerlerseniz, hangi dosyanın hata mesajlarına neden olduğunu görebilirsiniz.

Muhtemelen Serg'in cevabı uyarı iletişim kutusundan kurtulmak için yeterli.

Düzenle:

Güncellenen soru nedeniyle birkaç şey eklemek istersiniz.

Daha önce aksine /usr/sbin/lightdm-session, şimdi bash altında (daha önce sh) çalıştırılır. Yıllardan Bu yüzden onun kaynak ~/.profilesonuçların ~/.profilekaynak ~/.bashrc. Muhtemelen bu, varsayılan içeriğin ~/.profiledeğişmesi gerektiği anlamına gelir .

Düzeltmek için yapabileceğiniz en kolay şey, önerdiğiniz gibi, yalnızca $ TERM ayarlanmışsa tput'u çağırmaktır.


$ TERM ayarlandı mı kontrol etmeye çalıştım, ancak işe yaramadı.
Sildoreth

@Sildoreth: Lütfen bize bunun için tam kodu gösterebilir misiniz? (Lütfen sorunuzu tekrar düzenleyin.)
Gunnar Hjalmarsson

soruya eklendi
Sildoreth

@ Sildoreth: Gördüm. Belki de bunun nedeni, işlemlerin alt işlemlerde çağrılmasıdır. (Sadece bir tahmin.) Her neyse, bununla baş etmenin güzel bir yolunu buldun.
Gunnar Hjalmarsson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.