394

How can I configure Mac Terminal to have color ls output? I am using MacOS 10.5

2

13 Answers 13

447

Edit:

~/.bash_profile

or

~/.profile

and add the following line to simply enable color output via ls:

export CLICOLOR=1

To customize the coloring shown by ls you can optionally add this variable, LSCOLORS.

Examples

  • Default

    export LSCOLORS=ExFxCxDxBxegedabagacad
    
  • You can use this if you are using a black background

    export LSCOLORS=gxBxhxDxfxhxhxhxhxcxcx
    
  • If you'd like to mimic the colors of a typical Linux terminal:

    export LSCOLORS=ExGxBxDxCxEgEdxbxgxcxd
    

Once you've add the above to either ~/.bash_profile or ~/.profile you can either logout/login or source the file in your shell, for eg:

$ . ~/.bash_profile

NOTE: If you need help in selecting colors to use you can use this online tool called LSCOLORS Generator.

8
  • 1
    Is there a way to make the colored text not look bold?
    – MemphiZ
    Commented Nov 4, 2014 at 16:45
  • 1
    @JamieCook I find Mikulas' colors more linux consistent. Specifically, a broken symlink should be dark red. With your lscolors its blue... this is not a small issue.
    – Ray Foss
    Commented Jul 10, 2017 at 14:51
  • 1
    Does not work on mac sierra and later
    – tread
    Commented Mar 20, 2018 at 19:35
  • 1
    @RayFoss indeed, that is no small issue, but OS X cannot make a difference between valid and broken symlinks by default. The only viable alternative is to use gnu ls Commented Aug 8, 2018 at 8:23
  • 2
    @StevieG Works for me on High Sierra. Make sure you set it right: echo $CLICOLOR should give 1? Commented Dec 11, 2018 at 21:39
201

You can add

alias ls='ls -G'

to your ~/.bash_profile to get colored ls output.

7
  • 47
    Mine is alias ls="ls -Gp" — the -p adds a slash after each directory. For me, it provides that much more visual differentiation, which is helpful. Commented Jun 12, 2009 at 15:40
  • 42
    I see your -p and raise you a -F which in addition puts an * after executables, | after pipes, @ after symlinks, et cetera.
    – aib
    Commented Dec 27, 2010 at 18:57
  • 26
    Just for fun, throw in a -h, which will format sizes in "human readable" units, i.e. 100b 10k, 23m, 4.2g
    – Armentage
    Commented May 1, 2011 at 16:29
  • 3
    If you don't have a .bash_profile already at ~/.bash_profile, be sure to source it, so that it will work. Do this with "source ~/.bash_profile" Commented Jul 28, 2011 at 18:00
  • 2
    Dunno if this has changed since 2011, but you can replace the alias with export CLICOLOR=1 to accomplish the same thing.
    – David Lord
    Commented May 31, 2015 at 11:47
38

I find that all I need really is adding this to my ~/.bash_profile or ~/.bashrc (for Bash) or ~/.zshrc (for Zsh, the new default shell in Catalina)

export CLICOLOR=1
4
  • Or ~/.bashrc.
    – Chris Page
    Commented Aug 6, 2015 at 4:52
  • doesn't appear to work on capitan ):
    – drevicko
    Commented Jul 18, 2016 at 9:42
  • 1
    Worked like a boss in El Captian for me, thanks for posting @Filype
    – fusion27
    Commented Mar 14, 2017 at 12:19
  • You have to either: 1. close you terminal and reopen, 2. resource the config file: . ~/.bash_profile, or 3. logout/login
    – slm
    Commented Sep 14, 2018 at 13:07
13

If you want a readable Mac OS X Terminal color scheme, you may want to look into this:

I've been using this for over a year now, and I might not be able to function without it!

Here's an updated link:

1
  • 6
    As of Mac OS X Lion 10.7, Terminal allows customizing the ANSI colors, so using SIMBL or other extensions is no longer necessary. It also supports 256 colors.
    – Chris Page
    Commented Sep 4, 2011 at 8:59
12

Also you can customize the prompt color (and its format) by adding:

PS1='\[\e[0;33m\]\h:\W \u\$\[\e[m\] '

to ~/.bash_profile or ~/.profile file. Where 0;33 is regular yellow which looks nice in my black/semitransparent terminal window.

Here is a full list of colors and their explanations: https://wiki.archlinux.org/index.php/Color_Bash_Prompt

My awesome terminal window

0
10

Personally, I'm using Oh My Zsh for adding color and other tricks to my Terminal. I think that is the easiest way.

oh-my-zsh is an open source, community-driven framework for managing your Zsh configuration.

It comes bundled with a ton of helpful functions, helpers, plugins, themes, and a few things that make you shout…

enter image description here

4
  • This is beautiful color theme. Can I use this color theme on my bash?
    – PnotNP
    Commented Jul 20, 2020 at 18:12
  • Hmm you should probably look at oh-my-bash
    – StrawHara
    Commented Jul 21, 2020 at 15:10
  • Super late to the party... but do you happen to recall what theme is being used in your screenshot? Commented Aug 15, 2020 at 19:34
  • @EricHarlan you got all the theme there github.com/ohmyzsh/ohmyzsh/wiki/Themes
    – StrawHara
    Commented Aug 16, 2020 at 9:46
8

Another option is to use the GNU ls which is part of the 'coreutils' program.

You can get it via Rudix or Homebrew (brew info coreutils)or Macports or Fink. That might be preferable to using a "Mac OS X-only" solution if you use the same shell config files on different systems, or are already familiar with GNU ls.

1
7

UPDATE: I switched to Oh my zsh a year back and it is awesome. My favourite theme is lambda-mod and my version of it.


Combining all the answers here is what I use:

COLOR_RED="\033[0;31m"
COLOR_YELLOW="\033[0;33m"
COLOR_GREEN="\033[0;32m"
COLOR_OCHRE="\033[38;5;95m"
COLOR_BLUE="\033[0;34m"
COLOR_WHITE="\033[0;37m"
COLOR_RESET="\033[0m"

#git_color
function git_color {
  local git_status="$(git status 2> /dev/null)"

  if [[ ! $git_status =~ "working directory clean" ]]; then
    echo -e $COLOR_RED
  elif [[ $git_status =~ "Your branch is ahead of" ]]; then
    echo -e $COLOR_YELLOW
  elif [[ $git_status =~ "nothing to commit" ]]; then
    echo -e $COLOR_GREEN
  else
    echo -e $COLOR_OCHRE
  fi
}

#git_branch
function git_branch {
  local git_status="$(git status 2> /dev/null)"
  local on_branch="On branch ([^${IFS}]*)"
  local on_commit="HEAD detached at ([^${IFS}]*)"

  if [[ $git_status =~ $on_branch ]]; then
    local branch=${BASH_REMATCH[1]}
    echo "($branch)"
  elif [[ $git_status =~ $on_commit ]]; then
    local commit=${BASH_REMATCH[1]}
    echo "($commit)"
  fi
}

PS1='\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]'
PS1+="\[\$(git_color)\]"        # colors git status
PS1+="\$(git_branch)"           # prints current branch
PS1+="\[$COLOR_BLUE\]\[$COLOR_RESET\]\$ "
export PS1

export LC_ALL=en_US.UTF-8
export CLICOLOR=1
export LSCOLORS=gxBxhxDxfxhxhxhxhxcxcx
alias ls="ls -Gp"

enter image description here

5

Forget all those decades-old cryptic codes for gosh sakes, use the built in Terminal --> Preferences... Settings pane to set the default skin, and edit the ANSI colors to your liking. You can set the font, too. I prefer Menlo 12pt. This is how any regular Joe can do it, and avoid all the crazy command-line, unix-esque way of doing things as other posters have suggested.

2
  • 15
    I think anybody experienced enough to even know that ls can have colored output is also able to run a few Unix commands to configure it correctly.
    – nohillside
    Commented Sep 21, 2012 at 21:35
  • 10
    But this just makes ls show in one colour it does not make links, directories, files show in different colours as ls can do
    – mmmmmm
    Commented Sep 25, 2012 at 12:29
4

Simply add the following line to ~/.bash_profile file:

export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "

Preview: enter image description here

This is my preferred colors. You can customize each part of prompt's color by changing m codes (e.g. 34m) which are ANSI color codes.

List of ANSI Color codes:

  • Black: 30m
  • Red: 31m
  • Green: 32m
  • Yellow: 33m
  • Blue: 34m
  • Purple: 35m
  • Cyan: 36m
  • White: 37m
4

For the Catalina version, you need to add export CLICOLOR=1 in ~/.zshrc.

If you want to adjust the colour palette, change colours theme in terminal settings.

1
  • 1
    this is the most up to date answer for Catalina with zsh. Commented Aug 25, 2020 at 9:06
1

Absolutely nothing worked for me. Eventually I found a very weird solution that fixed everything.

I opened ~/Library/Preferences/com.apple.Terminal.plist and searched for 'terminal' with Ctrl+F. I removed a section, that said 'DisableColor' or something like that.

3
  • plist is a binary format in MacOS 13.1, not meant for human eyes. Commented Jan 17, 2023 at 12:36
  • Problem is fixed and Mac still works, so I don't care. Commented Jan 20, 2023 at 18:58
  • 1
    For those who do care, VS Code has extensions to read plist files. Commented Jan 21, 2023 at 15:50
0

Terminal Settings -> Profiles -> Shell

Check Run command: and enter export CLICOLOR=1

enter image description here