$ TERM के लिए कोई मूल्य नहीं और नहीं -T निर्दिष्ट नहीं है


22

मैंने हाल ही में apt-get dist-upgradeअपने कुबंटु और लुबंटू लिनक्स बक्से को अपग्रेड (के साथ ) किया है, और अब हर बार जब मैं इनमें से किसी एक मशीन में लॉग इन करता हूं, तो मैं इसे अपडेट करता हूं:

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

यहां सटीक संदेश का स्क्रीनशॉट दिया गया है: tput: $ TERM और no -T के लिए कोई मूल्य निर्दिष्ट नहीं है

यह मेरे लुबंटू मशीन और कुबंटू मशीन दोनों पर हुआ, और मेरे अपग्रेड होने के बाद तक यह कोई समस्या नहीं थी; इसलिए मुझे संदेह है कि यह उपयोगकर्ता की त्रुटि नहीं थी।

मैं इसे कैसे ठीक करूं?

अद्यतन करें

मैंने इसे अपनी .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सेट नहीं किया गया है?

अद्यतन २

एक समाधान मैंने कोशिश की कि क्या $TERMसेट किया गया था या नहीं । लेकिन यह काम नहीं कर रहा था; मुझे अभी भी वही त्रुटि संदेश मिला है। यहाँ कोड है:

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

तो स्पष्ट रूप $TERM से सेट किया गया था , लेकिन फिर tputभी यह निष्कर्ष निकाला कि यह नहीं था।


1
अगर मैं गलत .profileशेल की परवाह किए बिना रन नहीं बना रहा हूं
सर्जी कोलोडियाज़नी

@Serg लेकिन एक GUI शेल लॉगिन के दौरान? इसके अलावा, मैंने हमेशा इस समस्या को नहीं देखा।
सिल्डोरेथ

ठीक है, हाँ, यह लॉग इन करने वाले उपयोगकर्ता पर चलाया जाना चाहिए और यह वही है जो आप कर रहे थे
सर्गियो कोलोडियाज़नी

जवाबों:


13

मेरे लिए आखिरकार क्या काम था यह जांचने के लिए कि क्या शेल एक इंटरैक्टिव शेल था। मैं इस अन्य पोस्ट पर 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

अहा, यह एक सुंदर समाधान है। :)
गुन्नार हेजलारसन 21

2
यदि यह अंदर है .bashrc, तो मुझे आश्चर्य होता है। डिफ़ॉल्ट .bashrcमें शामिल हैं: # If not running interactively, don't do anything case $- in *i*) ;; *) return;;इसलिए, जब तक कि इंटरैक्टिव नहीं हो, आपकी सेटिंग्स लागू नहीं होनी चाहिए।
मुरु

@ muru माय .bashrc फ़ाइल बहुत गैर-डिफ़ॉल्ट है। :)
सिल्डोरथ

लेकिन आपने ऐसा कहां किया? में .bashrc?
jjmerelo

मुझे लगता है कि अगर आप अपने फ़ाइल यह क्लीनर के शीर्ष पर डाल: [[ $- == *i* ]] || returnरेफरी: ( askubuntu.com/a/1070182/362122 )
क्लिक करें If

9

अगर तुम यह करते हो

if tty -s
then
    : # your tput commands
fi

यह आपकी समस्या को ठीक कर देगा। -S विकल्प के बिना tty या तो आपके tty को प्रदर्शित करेगा या लिखेगा "a tty" नहीं


ttyइसके मैनुअल पेज से विवरण "मानक इनपुट से जुड़े टर्मिनल का फ़ाइल नाम प्रिंट करें।" यदि आपकी स्क्रिप्ट की स्टड एक पाइप है, तो यह परीक्षण विफल हो जाएगा, जिसके परिणामस्वरूप आपका प्रोग्राम अपने आउटपुट में सिर्फ इसलिए रंगों को प्रिंट करना बंद कर देता है क्योंकि उसका इनपुट पाइप से आ रहा है। शायद test -t 1(अंग्रेज़ी में: "stdout एक टर्मिनल से जुड़ा है?") वही है जो आप वास्तव में चाहते हैं? इस तरह आपको रंग तभी मिलते हैं जब आउटपुट टर्मिनल पर जा रहा होता है, और आपको अजीब टर्मिनल कोड नहीं दिखेंगे यदि आप इसके आउटपुट को किसी फ़ाइल में रीडायरेक्ट करते हैं या इसके माध्यम से पाइप करते हैं, तो कहते हैं less
TheDudeAbides

6

मेरे लिए, जोड़ना

export TERM=xterm

/etc/profileसमस्या को हल करने के लिए केवल एक चीज थी। वास्तव में, त्रुटि ने हमें संकेत दिया:No value for $TERM


4

[ अलग परिदृश्य, लेकिन खोज इंजन मुझे पहले यहाँ ले जाता है]

जब " tput: $ अवधि के लिए कोई मूल्य और कोई -टी निर्दिष्ट " त्रुटि एक में होता है डोकर कंटेनर (मेरे लिए, जब एक खोलने zsh खोल बुला docker exec -it <container> zsh(इंटरैक्टिव के लिए मैं)) इसे ठीक करने के लिए एक ही रास्ता, चर सेट करने के लिए था ENV TERM xterm-256colorइस छवि के लिए Dockerfile की तरह ।

अनुमोदन जैसे RUN export TERM=xterm-256color या RUN echo "export TERM=xterm-256color" >> ~/.zshrcसफल नहीं थे। TERM के लिए अन्य मूल्य भी संभव हैं।


3

टर्मिनल खोलने का प्रयास करें (इससे कोई फर्क नहीं पड़ता कि tty1 भी क्या करेगा) और इस लाइन को चलाएं

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

आपको x विंडो के लिए डिफ़ॉल्ट टर्मिनल एमुलेटर की पसंद के साथ प्रस्तुत किया जाएगा। संख्या का चयन करके एक चुनें, और आपके द्वारा किए जाने के बाद रिबूट करें।

$ sudo अद्यतन-विकल्प --config x-terminal-emulator
वैकल्पिक x- टर्मिनल-एम्यूलेटर (प्रदान करने / usr / bin / x-टर्मिनल-एमुलेटर) के लिए 6 विकल्प हैं।

  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:  

जब मैं यह कोशिश करता हूं, तो यह मुझे बताता है "लिंक ग्रुप एक्स-टर्मिनल-एमुलेटर में केवल एक ही विकल्प है [...] कॉन्फ़िगर करने के लिए कुछ भी नहीं"। यह मेरी कुबंटू मशीन पर है।
सिल्डोरेथ

उदाहरण के लिए gnome-terminalयाsakura
Sergiy Kolodyazhnyy

मेरे साथ भी ठीक यही समस्या आई. मैंने चुना है sakura। हालाँकि, यह सूक्ति टर्मिनल आवरण के साथ एक समस्या है; यदि हां, तो उसे ठीक क्यों नहीं किया गया?
जर्मेरेलो

यह वास्तव में समस्या को ठीक नहीं करता है।
jjmerelo

2
@jjmerelo जैसा कि ओपी ने बाद में अपने जवाब में बताया, उनकी .bashrc फ़ाइल में लाइनें थीं, जो त्रुटि दे रही थीं। सूक्ति टर्मिनल आवरण मुद्दा नहीं होना चाहिए। आरंभ में मेरा अनुमान था कि $ TERM वेरिएबल सेट नहीं किया गया था, जो कि एक अन्य उपयोगकर्ता, गुनार है, जिसका उसके उत्तर में उल्लेख किया गया था।
सर्गी कोलोडियाज़नी

1

त्रुटि संवाद बग # 678421 के ठीक होने के कारण है , इसलिए यह मेरी गलती है। ;) यह आपकी कॉन्फ़िगरेशन फ़ाइलों में कुछ कमांड (एस) के कारण त्रुटियों के बारे में बताता है। यदि आप शीर्ष पर स्क्रॉल करते हैं, तो आप देख सकते हैं कि कौन सी फ़ाइल त्रुटि संदेशों का कारण बन रही है।

संभवतः सर्ग का जवाब चेतावनी संवाद से छुटकारा पाने के लिए पर्याप्त है।

संपादित करें:

अद्यतन प्रश्न के कारण कुछ बातें जोड़ना चाहेंगे।

पहले के विपरीत, /usr/sbin/lightdm-sessionअब बैश (पहले श) के तहत चलाया जाता है। यही कारण है कि इसकी सोर्सिंग में ~/.profileपरिणाम के ~/.profileस्रोत ~/.bashrc। संभवतः इसका मतलब है कि डिफ़ॉल्ट सामग्री को ~/.profileबदलना चाहिए।

आप इसे ठीक करने के लिए सबसे आसान काम कर सकते हैं, जैसा कि आपने सुझाव दिया है, केवल $ tTT सेट होने पर ही tput को कॉल करें।


मैंने जाँचने का प्रयास किया कि क्या $ TERM सेट किया गया था, लेकिन यह काम नहीं कर रहा था।
सिल्डोरेथ

@ चिल्ड्रेथ: क्या आप ऐसा करने के लिए कृपया हमें सटीक कोड दिखा सकते हैं? (कृपया अपने प्रश्न को फिर से संपादित करें।)
गुन्नार हेजलरमसन

सवाल में जोड़ा
सिल्डोरथ

@ सिल्डोरथ: देखा। हो सकता है कि यह इसलिए है क्योंकि ट्रूप को उपप्रकारों में कहा जाता है। (बस एक अनुमान।) वैसे भी, आपको इससे निपटने का एक अच्छा तरीका मिला।
गुन्नार हेजलमरसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.