web-dev-qa-db-ja.com

$ TERMの値がなく、-Tが指定されていません

最近、KubuntuとLubuntu Linuxボックスを(apt-get dist-upgradeで)アップグレードしました。今では毎回これらのマシンの1つにログインすると、次のメッセージが表示されます。

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

正確なメッセージのスクリーンショットは次のとおりです。 tput: No value for $TERM and no -T specified

これはLubuntuマシンとKubuntuマシンの両方で発生し、アップグレードするまで問題ありませんでした。そのため、ユーザーエラーではなかったと思われます。

どうすれば修正できますか?

UPDATE

これを.bashrcファイルまで追跡しました。このファイルは.profileファイルから呼び出されます。ただし、GUIログインを実行すると.bashrcファイルが実行されるのに対し、アップグレード前は実行されなかったという事実は少し奇妙です。いいえ、最近、.bashrcファイルまたは.profileを変更していません。また、bashは私のデフォルトのシェルではありません。

問題は、.bashrcファイルでtputを呼び出して、プロンプトに色を追加する際に使用する変数を設定していることです。しかし、.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

私が試した解決策の1つは、$TERMが設定されているかどうかを確認することでした。しかし、これはうまくいかないようでした。それでも同じエラーメッセージが表示されます。コードは次のとおりです。

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

したがって、明らかに$TERMが設定されていたが、tputはまだ設定されていないと結論付けた。

19
Sildoreth

最終的には、シェルがインタラクティブシェルであるかどうかを確認することができました。 unix.stackexchangeのこの他の投稿に基づいてソリューションを作成しました: シェルがlogin/interactive/batchかどうかを確認する方法

したがって、ソリューションのコードは次のとおりです。

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
13
Sildoreth

これをするなら

if tty -s
then
    : # your tput commands
fi

それはあなたの問題を解決します。 -sオプションを指定しないと、ttyはttyを表示するか、「not tty」と書き込みます。

9
Robert Jacobs

私にとっては、追加

export TERM=xterm

問題を解決したのは/etc/profileだけでした。実際、エラーはヒントを与えてくれました:No value for $TERM

5
jjmerelo

[異なるシナリオですが、検索エンジンが最初にここに私を導きます]

tput:$ TERMの値がなく、-Tが指定されていない」エラーがDockerコンテナーで発生した場合(私にとっては、 zsh Shellを開くときにdocker exec -it <container> zsh(インタラクティブの場合は-i)を呼び出す)これを修正する唯一の方法は、このイメージのDockerfileでENV TERM xterm-256colorのような変数を設定することでした。

RUN export TERM=xterm-256colorRUN echo "export TERM=xterm-256color" >> ~/.zshrcなどのアプローチは成功しませんでした。 TERMの他の値も可能です。

3
mga0

ターミナルを開いてみて(どれでもかまいません、tty1でもできます)、この行を実行してください

Sudo update-alternatives --config x-terminal-emulator

Xウィンドウ用のデフォルトのターミナルエミュレータを選択できます。番号を選択して1つを選択し、完了したら再起動します。

$ sudo update-alternatives --config x-terminal-emulator
代替x-terminal-emulatorには6つの選択肢があります(/ 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:  
2

エラーダイアログは bug#678421 の修正が原因であるため、私のせいです。 ;)構成ファイルの1つにあるコマンドによるエラーについて通知します。一番上までスクロールすると、エラーメッセージの原因となっているファイルを確認できます。

おそらく、Sergの答えは警告ダイアログを取り除くのに十分です。

編集:

更新された質問のために、いくつかのことを追加したいと思います。

以前とは異なり、/usr/sbin/lightdm-sessionはbash(以前はsh)の下で実行されるようになりました。 ~/.profileを調達すると、~/.profile調達~/.bashrcになります。おそらくこれは、~/.profileのデフォルトの内容を変更する必要があることを意味します。

それを修正するためにできる最も簡単なことは、あなたが提案したように、$ TERMが設定されている場合にのみtputを呼び出すことです。

1