88

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?

113

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

| improve this answer | |
  • 15
    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
  • 5
    in my .bash_profile I just wrote one line to alias (sort of ) bashrc -> source ~/.bashrc – Eric Hodonsky Apr 5 '16 at 16:49
98

.[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.

| improve this answer | |
  • 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. – Gordon Davisson 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
  • 2
    @dinosaur: "-r" checks if the file is readable. – mhvelplund Jun 4 '16 at 8:48
8

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

ln -s .bashrc .bash_profile
| improve this answer | |
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

| improve this answer | |
3

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.

| improve this answer | |
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.

| improve this answer | |
  • This is little more than a rehash of the answers from four years ago. – G-Man Says 'Reinstate Monica' 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.