101

I have a one-line .bashrc file in my home directory:

alias countlines='find . -type f -print0 | xargs -0 cat | wc -l'

But it is not creating the alias. Why might that be?

130

In OSX, .bash_profile is used instead of .bashrc.

And yes, the .bash_profile file should be located in /Users/YourName/
(In other words, ~/.bash_profile)

For example, /Users/Aaron/.bash_profile

6
  • 16
    This is not the right answer. Aliases are not inherited, so, if you only define them in .bash_profile, they won't be defined in non-login shells (eg when you run bash inside bash).
    – LaC
    Feb 13 '11 at 18:49
  • 1
    Or one can use bash_aliases which has the same effect as putting the aliases in bashrc, but more manageable: ss64.com/osx/syntax-bashrc.html
    – Atul Ingle
    Dec 10 '13 at 13:22
  • 6
    in my .bash_profile I just wrote one line to alias (sort of ) bashrc -> source ~/.bashrc Apr 5 '16 at 16:49
  • a girl almost threw the mac at me for arguing blindly that placing anything in ~/.bashrc on will work. Oct 14 '20 at 7:19
  • @EricHodonsky is living in 2030. You're a lion amongst sheep.
    – Sam
    Feb 25 at 6:05
105

.[bash_]profile and .bashrc can be used on both OS X and Linux. The former is loaded when the shell is a login shell; the latter when it is not. The real difference is that Linux runs a login shell when the user logs into a graphical session, and then, when you open a terminal application, those shells are non-login shells; whereas OS X does not run a shell upon graphical login, and when you run a shell from Terminal.app, that is a login shell.

If you want your aliases to work in both login and non-login shells (and you usually do), you should put them in .bashrc and source .bashrc in your .bash_profile, with a line like this:

[ -r ~/.bashrc ] && source ~/.bashrc

This applies to any system using bash.

7
  • 17
    +1 with the caveat that everything in .bashrc will be run again for sub-shells (and subsub-, subsubsub-, etc), so e.g. PATH=$PATH:/my/private/binaries will lead to PATH bloat. See this for a workaround. Feb 12 '11 at 18:51
  • 2
    True. Since exported instance variables are inherited, I just set them in .profile instead of .bashrc.
    – LaC
    Feb 13 '11 at 11:28
  • 1
    @LaC can you explain _Since exported instance variables are inherited, I just set them in .profile_…?
    – sam
    Jan 14 '14 at 18:11
  • 1
    @sam, I don't know where "instance" came from. I just meant "exported variables". Unfortunately I cannot edit that comment.
    – LaC
    Jan 15 '14 at 6:35
  • 3
    @dinosaur: "-r" checks if the file is readable.
    – mhvelplund
    Jun 4 '16 at 8:48
9

Or create a sym link called .bash_profile pointed at your .bashrc

ln -s .bashrc .bash_profile
1
  • On newer versions of OS X, the terminal may be using ZSH, which means .zshrc should be used instead of .bash_profile. Aug 12 at 15:58
6

I tried using the solution to update .bash_profile and .bashrc but that did not work because Catalina is using zsh. So, I needed to create a new file, ~/.zprofile, add my aliases there and then use command "source ~/.zprofile" to make it permanent.

4

Since MacOS Catalina zsh is the default shell. On this OS add the alias into ~/.zshrc

Pre Catalina add the alias to ~/.bash_profile

2
  • 1
    This should be the top answer. Aug 8 at 18:14
  • This worked for me on Big Sur. Terminal is using zsh. Aug 12 at 15:55
3

It is not being aliased because .bash_profile is used instead of .bashrc on Mac OS X.

So you have two options:

  • Put the alias in your ~/.bash_profile

  • Or source your .bashrc from your .bash_profile by adding this line to the .bash_profile:

    . ~/.bashrc

1

On Mac OS X Yosemite, run the following command:

vi ~/.profile

Then add the following line:

source ~/.bashrc

Now save and close .profile, then open a new Terminal window or just run:

source ~/.profile

See also this answer. It worked on v10.10.3.

2
  • This is little more than a rehash of the answers from four years ago. May 5 '15 at 1:36
  • Sure, just an easy eay to read and apply it. Plus a small contribution - since the other mentioned files were not available on my OS Yosemite.
    – Ricardo
    May 5 '15 at 19:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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