540

I just got a Mac after working with Ubuntu Linux for some time. Among the many things I'm trying to figure out is the absence of colors in my terminal window- like the ones that are shown (on Linux) when running ls -la or git status.

How can one activate colors in their shell?

1

7 Answers 7

805

Here is a solution I've found to enable the global terminal colors.

Edit your .bash_profile (since OS X 10.8) — or (for 10.7 and earlier): .profile or .bashrc or /etc/profile (depending on availability) — in your home directory and add following code:

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

CLICOLOR=1 simply enables coloring of your terminal.

LSCOLORS=... specifies how to color specific items.

After editing .bash_profile, start a Terminal and force the changes to take place by executing:

source ~/.bash_profile

Then go to Terminal > Preferences, click on the Profiles tab and then the Text subtab and check Display ANSI Colors.

Verified on Sierra (May 2017).

16
  • 21
    just did this by adding it to .bash_profile and it works. didn't work when I added it to .profile though. Thanks!
    – Morten
    Commented Aug 14, 2011 at 7:40
  • 3
    To @Morten and any others struggling with their bash profiles, see these answers for an explanation and a solution: stackoverflow.com/a/7780055/665488, superuser.com/a/244990. Commented Jan 15, 2013 at 0:12
  • 4
    dotfiles/.aliases has a great export LS_COLORS statement
    – bobobobo
    Commented Apr 22, 2013 at 18:23
  • 26
    If you want the same colors that Linux uses (at least Debian and Ubuntu), use LSCOLORS=ExGxFxdxCxDxDxxbaDecac
    – remram
    Commented Jul 24, 2017 at 18:53
  • 3
    I use a Mac M1 pro with macOS Monterey and the file who I need to edit is ~/.zprofile Commented Jun 2, 2022 at 8:42
139

You can use the Linux based syntax in one of your startup scripts. Just tested this on an OS X Mountain Lion box.

eg. in your ~/.bash_profile

export TERM="xterm-color" 
export PS1='\[\e[0;33m\]\u\[\e[0m\]@\[\e[0;32m\]\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]\$ '

This gives you a nice colored prompt. To add the colored ls output, you can add alias ls="ls -G".

To test, just run a source ~/.bash_profile to update your current terminal.

Side note about the colors: The colors are preceded by an escape sequence \e and defined by a color value, composed of [style;color+m, then wrapped in an escaped [] sequence. eg.

  • red = \[\e[0;31m\]
  • bold red (style 1) = \[\e[1;31m\]
  • clear coloring = \[\e[0m\]

I always add a slightly modified color-scheme in the root's .bash_profile to make the username red, so I see clearly if I'm logged in as root (handy to avoid mistakes if I have many terminal windows open).

In /root/.bash_profile:

PS1='\[\e[0;31m\]\u\[\e[0m\]@\[\e[0;32m\]\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]\$ '

For all my SSH accounts online I make sure to put the hostname in red, to distinguish if I'm in a local or remote terminal. Just edit the .bash_profile file in your home dir on the server.. If there is no .bash_profile file on the server, you can create it and it should be sourced upon login.

If this is not working as expected for you, please read some of the comments below since I'm not using MacOS very often..

If you want to do this on a remote server, check if the ~/.bash_profile file exists. If not, simply create it and it should be automatically sourced upon your next login.

9
46

MartinVonMartinsgrün and 4Levels methods confirmed work great on Mac OS X Mountain Lion.

The file I needed to update was ~/.profile.

However, I couldn't leave this question without recommending my favorite application, iTerm 2.

iTerm 2 lets you load global color schemes from a file. Really easy to experiment and try a bunch of color schemes.

Here's a screenshot of the iTerm 2 window and the color preferences. iTerm2 Color Preferences Screenshot Mac

Once I added the following to my ~/.profile file iTerm 2 was able to override the colors.

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Here is a great repository with some nice presets:

iTerm2 Color Schemes on Github by mbadolato

Bonus: Choose "Show/hide iTerm2 with a system-wide hotkey" and bind the key with BetterTouchTool for an instant hide/show the terminal with a mouse gesture.

6
  • 1
    iTerm2 crashed often on my system, so i switched over to oh-my-zsh github.com/robbyrussell/oh-my-zsh. There are also themes available Commented Apr 11, 2013 at 13:48
  • Hey! Please change baskerville link to proper one. Seems wrong copy-paste. Commented Jul 3, 2014 at 10:54
  • @NickWoodhams, what is the color-theme you are using in the screenshot? Commented Feb 9, 2015 at 11:13
  • 1
    @IndradhanushGupta Not sure what color scheme that was, it was a while ago. But now I am using the Pure ZSH theme and loving it. github.com/sindresorhus/pure Commented Feb 12, 2015 at 4:35
  • 1
    this is a nice color scheme and what I needed to check the items types //dirs and etc
    – rio
    Commented Aug 3, 2015 at 12:01
20

If you want to have your ls colorized you have to edit your ~/.bash_profile file and add the following line (if not already written) :

source .bashrc

Then you edit or create ~/.bashrc file and write an alias to the ls command :

alias ls="ls -G"

Now you have to type source .bashrc in a terminal if already launched, or simply open a new terminal.

If you want more options in your ls juste read the manual ( man ls ). Options are not exactly the same as in a GNU/Linux system.

1
  • 6
    A somewhat better option is to replace the 'alias' definition with 'export CLICOLOR=" "'. This has the advantage of usually continuing to work even if you switch shells during a terminal session (as long as environment variables are inherited - aliases aren't).
    – Ned Deily
    Commented Oct 11, 2009 at 17:32
7

If you are using tcsh, then edit your ~/.cshrc file to include the lines:

setenv CLICOLOR 1
setenv LSCOLORS dxfxcxdxbxegedabagacad

Where, like Martin says, LSCOLORS specifies the color scheme you want to use.

To generate the LSCOLORS you want to use, checkout this site

3
  • 4
    bash has been the default in OS X since October 2003. Commented Feb 26, 2013 at 18:53
  • 1
    I think you're right. I just got a new mac and it had bash as default. I guess IT kept setting up my macs at work to have tcsh by default.
    – user937726
    Commented Mar 7, 2013 at 0:22
  • 2
    The link is just awesome!
    – Sankalp
    Commented Sep 21, 2016 at 22:48
4

Check what $TERM gives: mine is xterm-color and ls -alG then does colorised output.

1
  • well, on capitan with xterm-256color, I get no colours. CLICOLOR and LSCOLORS don't change that ):
    – drevicko
    Commented Jul 18, 2016 at 9:41
2

When I worked on Mac OS X in the lab I was able to get the terminal colors from using Terminal (rather than X11) and then editing the profile (from the Mac menu bar). The interface is a bit odd on the colors, but you have to set the modified theme as default.

Further settings worked by editing .bashrc.

Not the answer you're looking for? Browse other questions tagged or ask your own question.