24

I have a .bash_profile file that I added some stuff to (aliases and color and some git stuff) and when I open iTerm and source it then everything's fine and I have everything but when I close iTerm and reopen it then no colors and no aliases until I source it again.

What should I do to permanently source it?

Is it maybe sourcing another file? How can I check that?

EDIT: I checked my iTerm preferences, and the "login shell" option is checked so I imagine it should source it when i open iTerm.

levtatarov
  • 389
  • 1
  • 2
  • 9
  • `.bash_profile` should be sourced automatically. Does it work with Terminal.app? In your iTerm settings, what is the *Command* being called under *Preferences » Profiles » Default » General*? – slhck Mar 28 '13 at 10:18
  • no command, 'login shell' is checked – levtatarov Mar 28 '13 at 10:24
  • Does it work in Terminal? Have you tried temporarily moving `~/Library/Preferences/com.googlecode.iterm2.plist` somewhere else? – Lri Apr 16 '13 at 11:21
  • This page and the answers helped me with this issue, but also errors in your .bash_profile can cause code not to execute, in my case it was a [ character in an unescaped password string that stopped subsequent commands executing – chim Nov 09 '17 at 13:53
  • For me, I had to write `source ~/.bash_profile` in my `~/env.sh`. [This post](https://github.com/robbyrussell/oh-my-zsh/issues/3807#issuecomment-187930190) basically helped me. – Sufian May 30 '18 at 11:08
  • same problem i solved with `bash -l` or --login. – kyb May 23 '19 at 14:09
  • If you are using `zsh` instead of `bash`, the terminal will source `~/.zshrc` instead of `~/.bash_profile` – forzagreen Jan 07 '21 at 00:07

5 Answers5

29

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 either of these, open a new shell window, and your .bash_profile should be sourced.

Matt S
  • 391
  • 3
  • 4
9

Ok so I dug deeper into it and it's trying to source .profile and I, instead, had .bash_profile. So I created a ~/.profile file and copied the content of .bash_profile into it, and then - WORKS! It is sourced whenever I start iTerm or Terminal.

Giacomo1968
  • 53,069
  • 19
  • 162
  • 212
levtatarov
  • 389
  • 1
  • 2
  • 9
  • If both `~/.bash_profile` and `~/.profile` exist and are readable, bash should only execute `~/.bash_profile` (see /usr/share/doc/bash/bash.html). Does `ls -l ~/.bash_profile` print something like `-rw-r--r-- 1 username`? – Lri Apr 16 '13 at 12:22
  • `ls -l ~/.bash_profile` prints `-rw-r--r--@ 1 username staff ... date` . Is the @ a problem? – Etienne Low-Décarie Jun 26 '14 at 13:22
  • I am having this same problem. And when I run that command I get the same thing as you Etienne Low Decarie. – wuno Nov 11 '16 at 05:55
3

.profile, .bash_profile and similar files are only sourced by "login" shells. In other words, only when you log in to the system. Therefore it does not make sense to set aliases there.

Keep only environment variables (export commands) in .bash_profile. Use ~/.bashrc for everything else. Source it from .bash_profile too.

u1686_grawity
  • 426,297
  • 64
  • 894
  • 966
  • 4
    OS X terminals launch login shells by default. – slhck Mar 28 '13 at 10:17
  • 1
    In my case, I am using mac zsh terminal, so I had to move the contents of my old .bash_profile to .zprofile, checkout this solution: https://superuser.com/a/187673/428141 that worked for me – s_bighead Apr 23 '20 at 18:03
1

I was thinking on .bash_profile then I forgot to login and doesn't work, if you login your .bash_profile will work perfectly.

Try:

$ login
$ login: (your name here)
$ password: (your password here)
Roney Michael
  • 1,056
  • 1
  • 14
  • 22
Boky
  • 11
  • 2
0

I had this same problem. I fixed it by going to iTerm > Preferences > General. Select your desired profile (if you have more than one) and toggle the Command option and input /usr/local/bin/bash -l. If you don't have Homebrew installed then it will likely be /bin/bash -l. If you aren't sure, type the command $which bash and it will tell which executable you are running. Moreover, if you are on OS X, I highly recommend learning why you want Homebrew and how to install it. Note that its L and not I depending on your font. By adding the flag -l it starts bash in login mode and NOT interactive mode. If it starts in login mode then it will source your .bash_profile. This worked for me, hopefully it will help you!

tommyc38
  • 111
  • 2