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


22

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

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

正確なメッセージのスクリーンショットは次のとおりです。 tput:$ TERMの値がなく、-Tが指定されていません

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

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

更新

これを.bashrcファイルまで追跡しました。このファイルは.profileファイルから呼び出されます。ただし、GUIログインを実行すると.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

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

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

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


1
私は間違っていない場合は.profile関係なく、デフォルトのシェルの実行
Sergiy Kolodyazhnyy

@Sergが、GUIシェルログイン中ですか?また、私はこの問題を常に見ていませんでした。
シルドレス

まあ、ええ、それは、ユーザーのloging時にRANである必要があり、これはあなたがやっていたまさにです
Sergiy Kolodyazhnyy

回答:


13

最終的には、シェルがインタラクティブシェルであるかどうかを確認することができました。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

ああ、それはエレガントなソリューションです。:)
グンナルハルマルソン

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
Klik

9

これをするなら

if tty -s
then
    : # your tput commands
fi

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


マニュアルページの説明はtty、「標準入力に接続されている端末のファイル名を出力する」です。スクリプトの標準入力がパイプの場合、このテストは失敗します。その結果、入力がパイプから送られているだけで、プログラムは出力の色の出力を停止します。たぶん(英語:「標準出力は端末に接続されていますか?」)そうすれば、あなたは色を取得するだけで、出力は端末に起こっている場合、あなたは、ファイルやパイプを通じ、言ってその出力をリダイレクトする場合は、奇妙なターミナルコードは表示されません。test -t 1less
TheDudeAbides

6

私にとっては、追加

export TERM=xterm

to /etc/profileは問題を解決した唯一のものでした。実際、エラーからヒントが得られました。No value for $TERM


4

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

これを修正する唯一の方法は、「tput:$ TERMの値がなく、-Tが指定されていない」エラーがDockerコンテナーで発生する場合(私にとっては、zshシェル呼び出しdocker exec -it <container> zsh(インタラクティブの場合は-i))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ウィンドウ用のデフォルトのターミナルエミュレータを選択できます。番号を選択して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:  

これを試すと、「リンクグループx-terminal-emulator [...] Nothing to configure」という選択肢が1つしかありません。これは私のKubuntuマシンにあります。
シルドレス

例えば、他の端末エミュレータをインストールしてくださいgnome-terminal、またはsakura
Sergiy Kolodyazhnyy

私はまったく同じ問題を抱えていました。を選択しましたsakura。ただし、これはgnome端末ラッパーの問題のようです。もしそうなら、なぜそれを修正しないのですか?
jjmerelo

実際には問題を解決しません。
jjmerelo

2
@jjmerelo OPが後で彼の答えで明らかにしたように、彼は.bashrcファイルにエラーがありました。Gnomeターミナルラッパーは問題になりません。私の最初の推測は、$ TERM変数が設定されていなかったということでした。これは、別のユーザーであるGunnarが彼の回答で言及したものです。
セルギーコロディアズニー

1

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

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

編集:

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

以前と/usr/sbin/lightdm-sessionは異なり、bashで実行されるようになりました(以前はsh)。その理由は、その調達~/.profileにおける結果~/.profileソーシング~/.bashrc。おそらくこれは、デフォルトのコンテンツを~/.profile変更する必要があることを意味します。

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


$ TERMが設定されているかどうかを確認しようとしましたが、機能していないようです。
シルドレス

@Sildoreth:そのための正確なコードを教えてください。(もう一度質問を編集してください。)
グンナルHjalmarsson

質問に追加
Sildoreth

@Sildoreth:見た。たぶん、サブプロセスでtputが呼び出されるためです。(推測です)とにかく、あなたはそれに対処する良い方法を見つけました。
グンナルHjalmarsson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.