How to set TERM environment variable for linux shell

45.5k Views Asked by At

I've got very odd problem when I set export TERM=xterm-256color in ~/.bash_profile. When I try to run nano or emacs I get the following errors.

nano:

.rror opening terminal: xterm-256color

emacs:

 is not defined.type xterm-256color
If that is not the actual type of terminal you have,
use the Bourne shell command `TERM=... export TERM' (C-shell:
`setenv TERM ...') to specify the correct type.  It may be necessary
to do `unset TERMINFO' (C-shell: `unsetenv TERMINFO') as well.

If I manually enter the following into the shell it works

export TERM=xterm-256color

I'm stumped.

1

There are 1 best solutions below

1
On BEST ANSWER

Looks like you have DOS line feeds in your .bash_profile. Don't edit files on Windows, and/or use a proper tool to copy them to your Linux system.

Better yet, get rid of Windows.

In more detail, you probably can't see it, but the erroneous line actually reads

export TERM=xterm-256color^M

where ^M is a literal DOS carriage return.

Like @EtanReisner mentions in a comment, you should not be hard-coding this value in your login files, anyway. Linux tries very hard to set it to a sane value depending on things like which terminal you are actually using and how you are connected. At most, you might want to override a particular value which the login process often chooses but which is not to your liking. Let's say you want to change to xterm-256color iff the value is xterm:

case $TERM in xterm) TERM=xterm-256color;; esac

This is not a programming question and yet an extremely common question on StackOverflow. Please google before asking.