Bash_profile

Active22 days ago

To make an alias for the Terminal in OS X, you can either put the aliases in .bash_profile or .bashrc. What is the difference between the two and why would I choose to put aliases in one and not the other?

Source ~/.bash_profile Now try to type few letters of command and press [TAB], you will see the auto-completed command or auto-suggested commands(for more than one matches). The command will complete the remaining of the file name or directory.

daviesgeekdaviesgeek
22.2k48 gold badges142 silver badges188 bronze badges

4 Answers

Edit

.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.

When you login (type username and password) via console, either sitting at the machine, or remotely via ssh: .bash_profile is executed to configure your shell before the initial command prompt.

But, if you’ve already logged into your machine and open a new terminal window (xterm) then .bashrc is executed before the window command prompt. .bashrc is also run when you start a new bash instance by typing /bin/bash in a terminal.

On OS X, Terminal by default runs a login shell every time, so this is a little different to most other systems, but you can configure that in the preferences.

jherran
10.6k9 gold badges40 silver badges63 bronze badges
AlexAlex
6,7033 gold badges17 silver badges32 bronze badges

X11 will look at your .bashrc while a 'regular' Terminal will look at .bash_profile

However, if you add the following to your .bash_profile, you can then move everything into your .bashrc file so as to consolidate everything into one place instead of two:

Best Bash_profile For Macjherran
10.6k9 gold badges40 silver badges63 bronze badges
LurchLurch

For macOS, the code to put into .bash_profile to consolidate everything into .bashrc is the following:

This is more specific for Mac terminal user.

frzhenfrzhen

Good Bash Profile

TLDR; use .bash_profile for your aliases.

Mac Bash Profile Location

The way the different initialisation files work together is a bit more complicated, and there are some important special cases in OSX. Here are the highlights:

  • Bash, on any platform, executes one of several different files depending on how it is invoked. The details are here.
  • OSX's Terminal App does something non-standard: it creates every new tab or window as if it were a login shell, which means that .bash_profile is called. Thus the TLDR advice above.
  • .bashrc is also an option, but that will be called every time you create a subshell (i.e., invoke bash), which can create inefficiency if you update a variable within it (e.g., PATH=/bin/foo:$PATH)
  • Other apps that have embedded terminals can choose to follow Terminal App's convention or not. Notably, Visual Studio Code, by default, does not.
  • Apps invoked via the GUI are not spawned from a shell. Thus, there are several competing mechanisms for setting environment variables for them to see, which have changed over the years.
  • Snippets that call .bashrc from .bash_profile are quite common. I don't recommend that, but it is a preference.
LeoLeo

You must log in to answer this question.

Mac Edit Bash Profile

Not the answer you're looking for? Browse other questions tagged terminalcommand-linebash .