How to make OS X to read .bash_profile not .profile file
Asked Answered
A

8

89

I have read so many suggestions about, not putting your customization aka commands in ".profile" file. Rather, create a .bash_profile for yourself and add your alias and etc.

But,when I open the new terminal, if there is only .bash_profile, OS X is not exporting/sourcing the commands mentioned in it. I have to manually source the .bash_profile.

If I create .profile file, on opening a new terminal, all my commands in .profile are executed and will be available readily.

Could you please help me in understanding, how does it works? Also, when to use .bashrc/.profile/.bash_profile files.

Thanks!

Anisotropic answered 12/9, 2013 at 19:42 Comment(2)
Related: #415903Psychophysiology
Are you sure you are using bash, and not some other shell? Try echo $SHELLOuthouse
I
93

According to the manual page that ships with OS X:

... it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

It should only read ~/.profile as a last resort if neither ~/.bash_profile nor ~/.bash_login are readable.

On all of my OS X systems, I have my ~/.bash_profile set to:

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

It is highly recommended that you do this on OS X in order to get bash to read your ~/.bashrc file like you would expect.

Impeccable answered 12/9, 2013 at 19:49 Comment(5)
I had the same problem with command aliases in ~/.profile not being put into effect in Terminal, and fixed the problem by using your method of moving the commands into ~/.bashrc (and deleting ~/.profile and making the little ~/.bash_profile). However, now when I execute echo $PATH all my path entries appear twice in the output. So something's still wrong!Lashaun
weird. had .bash_profile and terminal.app is ignoring it here. moved the file (kept all the same permissions) to .profile and now it is happy.Narrate
Reminder if you are using zsh instead of bash. The terminal will source .zshrc instead of .bash_profile.Cobaltite
As of today, the default terminal shell in OSX Cataline is zsh, so @AlbertSamuel's comment is should be turned into an answer.Observatory
@Cobaltite Thanks! Just got a new mac and this solved itSpectroscopy
E
122

According to Apple,

zsh (Z shell) is the default shell for all newly created user accounts, starting with macOS Catalina.

So you should verify your default shell with the command:

$ echo $SHELL

If the result is /bin/bash your default shell is BASH, and if the result is /bin/zsh the default is ZSH.

Go to home with $ cd ~/ and create the profile (if it does not exist) and edit it with the commands:

For bash:

$ touch .bash_profile
$ open .bash_profile

For ZSH:

$ touch .zprofile
$ open .zprofile
Exile answered 30/7, 2020 at 18:54 Comment(7)
You are a hero. I've been trying to figure out why .bash_profile/.bashrc/.profile don't work for half an hour.Voluntaryism
Thanks!! Z shell threw me for a loop and googling turns up all of the older methods...Phillada
thanks man! I used a mac after 4 years and you saved me. i was stuck with bash_profileKlingensmith
For Apple M1 chip, this one worked. Look no further, thank you Doug.!Impressible
Thank you @Exile for your answer.Alonzoaloof
Thanks, this is crazy I guess my original mac account was created pre-catalina and was using the typical .bash_profile. I recently ran into login issues, and my user account was recreated on Big Sur which I currently run. I was able to fix my env variables issues by "cd ~/" then "cp .bash_profile .zprofile"Edwardedwardian
The file is called .zshrc on mine.Lampoon
I
93

According to the manual page that ships with OS X:

... it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

It should only read ~/.profile as a last resort if neither ~/.bash_profile nor ~/.bash_login are readable.

On all of my OS X systems, I have my ~/.bash_profile set to:

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

It is highly recommended that you do this on OS X in order to get bash to read your ~/.bashrc file like you would expect.

Impeccable answered 12/9, 2013 at 19:49 Comment(5)
I had the same problem with command aliases in ~/.profile not being put into effect in Terminal, and fixed the problem by using your method of moving the commands into ~/.bashrc (and deleting ~/.profile and making the little ~/.bash_profile). However, now when I execute echo $PATH all my path entries appear twice in the output. So something's still wrong!Lashaun
weird. had .bash_profile and terminal.app is ignoring it here. moved the file (kept all the same permissions) to .profile and now it is happy.Narrate
Reminder if you are using zsh instead of bash. The terminal will source .zshrc instead of .bash_profile.Cobaltite
As of today, the default terminal shell in OSX Cataline is zsh, so @AlbertSamuel's comment is should be turned into an answer.Observatory
@Cobaltite Thanks! Just got a new mac and this solved itSpectroscopy
D
59

It's also possible that your terminal shell is defaulting to sh instead of bash. You can verify this first:

$ echo $SHELL
/bin/tcsh

To change this to bash, you can go into your Terminal -> Preferences -> Startup tab, and change "Shell Opens With:" from "Default login shell" to Command and value "/bin/bash".

Alternately, you can change your default shell by executing the following command at the command prompt:

chsh -s bin/bash

After you do one of these, open a new shell window, and your .bash_profile should be sourced.

Disquieting answered 22/8, 2014 at 17:19 Comment(3)
I found that I wanted to use sh instead of bash. I use zsh and I found this comment to be helpful: github.com/robbyrussell/oh-my-zsh/issues/… - basically add source ~/.bash_profile to the bottom of your ~/.zshrc configUbana
Yes, that work! Just, add source ~/.bash_profile to the bottom of your ~/.zshrc.Britt
Add source ~/.bash_profile to the bottom of your ~/.zshrc. This should be an answerHusband
S
21

For anyone else who finds this, instead of bash_profile, for new versions of mac you can use .zshrc. I.E., do

open .zshrc

and add what you need there.

Stob answered 26/1, 2021 at 15:40 Comment(0)
L
7

You can use zsh to fix the problem.

The Z shell (also known as zsh) is a Unix shell that is built on top of bash (the default shell for macOS) with additional features. It's recommended to use zsh over bash.

Installation

  1. Install zsh using Homebrew: $ brew install zsh
  2. Install Oh My Zsh: $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
  3. Move to .bash_profile setting .zshrc file
  4. To apply the changes you make you need to either start new shell instance or run: source ~/.zshrc
Loftin answered 12/5, 2020 at 0:51 Comment(1)
FYI bash is no longer the default shell for macOS (as of Catalina)Jung
M
5

If you are using zsh, you can source to .bash_profile by adding the following line to .zprofile

if [ -f ~/.bash_profile ]; then
    source ~/.bash_profile
fi
Mannish answered 7/12, 2021 at 9:58 Comment(0)
J
3

It should be mentioned that bash will first look for a /etc/profile file, as stated in the Bash man pages.

When bash is invoked as an interactive login shell, or as a non-inter- active shell with the --login option, it first reads and executes com- mands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

Jasminejason answered 23/4, 2014 at 2:29 Comment(3)
That bash on OSX by default doesn't source ~/.bashrc is unrelated to any content in /etc/profile. Rather, it has to do with the fact that Terminal.app creates every bash shell as a login session, so that only ~/.bash_profile or ~/.bash_login or ~/.profile (whichever is found fist) are sourced. If you want ~/.bashrc to be sourced too, source it explicitly from ~/.bash_profile, as in @Andon M. Coleman's answer. (If you explicitly start a bash session as an interactive NON-login session, ~/.bashrc gets sourced automatically.)Azotemia
You are absolutely right, and I posted my explanation too hastily. Thank your for the correction; I edited my answer and upvoted your comment as it explains correctly what I had attempted to describe.Jasminejason
On OSX El Capitan, I noticed that root runs under /bin/sh (I believe that's the Ash shell?) instead of the Bash shell. But when I open a terminal prompt and check the $SHELL var, it reads /bin/bash. So, what script do we edit for the case of /bin/sh?Whipstock
S
-4

I solved by simply adding bash (in a newline) into ~/.bash_profile file.

Stonecrop answered 12/1, 2019 at 12:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.