How to make OS X to read .bash_profile not .profile file

MacosBash

Macos Problem Overview


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!

Macos Solutions


Solution 1 - Macos

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.

Solution 2 - Macos

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

Solution 3 - Macos

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.

Solution 4 - Macos

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.

Solution 5 - Macos

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

Solution 6 - Macos

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.

Solution 7 - Macos

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

Solution 8 - Macos

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestioncherryhitechView Question on Stackoverflow
Solution 1 - MacosAndon M. ColemanView Answer on Stackoverflow
Solution 2 - MacosDougView Answer on Stackoverflow
Solution 3 - MacosMatt SView Answer on Stackoverflow
Solution 4 - MacosSabrina LeggettView Answer on Stackoverflow
Solution 5 - Macoshong developerView Answer on Stackoverflow
Solution 6 - MacosSteve BennerView Answer on Stackoverflow
Solution 7 - MacosBrij VaidView Answer on Stackoverflow
Solution 8 - MacosAnshulView Answer on Stackoverflow