Login Shell
Introduction
Seeing people give bad advice regarding colored ls output, I figured I better address this problem at the source. If you open a terminal and ls does not give colored output, or the prompt is similar to bash-2.04$
then you are in a non-login shell. This means none of the default profile scripts were sourced.
From the BASH man page:
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.
When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute.
You need to configure your terminal to give you an interactive "login shell". A login shell is the same as a login at the console. The default profile and user profile scripts will be sourced. Below are some ways to change how your terminal emulator behaves.
Eterm
Chances are if you are using Eterm you know what you're doing and not looking at this page. But just for reference, you can envoke a login shell by passing -l or --login-shell at the command prompt. The preferred method is to edit your .cfg file (the default is $PREFIX/share/Eterm/themes/Eterm/theme.cfg) and add login_shell true
in the toggles section.
Eterm -l
Gnome-Terminal
Edit -> Profiles
Select the profile (Default) and click Edit
Select the Title and Command Tab
Check the box next to Run command as a login shell
Konsole
There should be a way to do this from some configuration dialog, but I don't use KDE or Konsole, so all I can recommand at this time is the following:
konsole --ls
xterm / rxvt / aterm
xterm -ls rxvt -ls aterm -ls
XFCE 4.4 Terminal
Open the XFCE terminal.
Open Edit -> Preferences
Select the "General" icon at the left.
Under "Command", check the box next to "Run command as a login shell"
screen
If you launch screen directly in a X11 terminal emulator, you will notice that using the -ls or equivalent terminal emulator option is not enough to get colored ls output. This is because the terminal emulator is not calling the shell directly, and it's screen who does. screen has a configuration file option to use a login shell and another one to modify the system logs as if you had logged in (read the screen manpage for more details). However, this doesn't seem to be enough to get colored ls output.
Some people avoid these login shell confusions and problems by trying to get the same bash environment no matter how bash ends up being called as an interactive shell. This implies setting the bash prompt (controlled by the environment variable PS1) from the .bashrc user file and either sourcing .bashrc from .bash_profile or making .bash_profile a link to .bashrc. Additionally, you can include the following lines in your .bashrc script to always get colored ls output:
if [ -z "$LS_COLORS" ]; then source /etc/profile.d/coreutils-dircolors.sh fi
These recommendations are the "bad advice" the original author mentioned in the first paragraph.