You are here
Uncoloring ls
By default on every recent shell the output of ls is colorized. This is a great feature - but it makes using terminals that use a non-standard [not(background==black)] color-scheme awkward. Things just disappear; try reading directory name displayed in yellow on a yellow background. It is difficult.
How this colorization gets setup in openSUSE is that that the ls command is aliased to "ls --color=auto". You can see this aliasing using the alias command.
[fred@example ~]# aliasalias cp='cp -i'alias l.='ls -d .* --color=auto'alias ll='ls -l --color=auto'alias ls='ls --color=auto'alias mv='mv -i'alias rm='rm -i'alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
So a simple way to turn this off is: unlias ls
There you go - no more annoying colors! But they will be back the next time you login. Is this alias created in ~/.bashrc - nope. ~/.bash_profile - nope. /etc/bashrc - nope. /etc/profile - nope, errr.... well, sort of. The script /etc/profile runs every script in /etc/profile.d which ends in .sh. Within /etc/profile.d is ...drumroll... colorls.sh which indeed does alias ls='ls --color=auto'.
To disable colorization - the aliasing of ls upon login:
mv /etc/profile.d/colorls.sh /etc/profile.d/colorls.sh.x
Now that the script does not end in .sh /etc/profile will not run it.
When you start a new interactive login[*1] shell bash runs: /etc/profile, then ~/.bash_profile, ~/.bash_login, and then ~/.profile. Generally ~/.bash_profile will run ~/.bashrc, and generally ~/.bashrc will run /etc/bashrc. And, of course, when /etc/profile runs it runs each of the scripts which match /etc/profile.d/*.sh. It is almost comical; who says UNIX can't dance?
[*1] The shell distinguishes between login and secondary shells - a secondary shell is invoked by an existing shell, whereas a login shell is the first shell. It also distinguishes between interactive and non-interactive shells - like those running a script.
- Log in to post comments
Comments
And on openSUSE 42.2
On openSUSE 42.2 the command to disable the ls alias has changed to