views:

214

answers:

2

I am using MacVim (basically gvim for the mac).

If I open macvim from the command line then my $PATH variable will be properly set.

If I open macvim via point and click with the finder, the $PATH variable will NOT be properly set.

Can anyone give me some insight?

Note: I know at least part of my path is set in ~/.bashrc, but I am not sure where the rest of it is set.


Examples:

If I open macvim from the terminal:

% gvim basic.tex 

And then in MacVim I go:

:!echo $PATH
/opt/local/bin:/opt/local/sbin:/sw/bin:/sw/sbin:/Applications/MacVim.app/Contents/M
acOS:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/texbin:/usr/X11R6/bin 

This is the right path.


When I open the file with the mouse (in finder)

When I go:

:!echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin  

It gives me a little path. Why?

+1  A: 

The place to set environment variables on the Mac for GUI applications (those started via loginwindow, the Finder, etc.) is ~/.MacOSX/environment.plist

Alternately in MacVim you can choose to launch vim processes in a login-shell (look in the preferences).

For more info see this post.

sixtyfootersdude
A: 

The difference in the PATHs probably has something to do with the difference between a login shell (logging in) and a non-login shell (bringing up a console).

From the bash man page:

When bash is invoked as an interactive login shell ... it looks for ~/.bash_profile...

When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc...

What I did to get around this issue was to add the following code to my ~/.bash_profile, telling it to source my ~/.bashrc if it exists:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
Curt Nelson
Won't this result in bashrc being loaded twice when it is an interactive shell?
sixtyfootersdude
I don't believe that it will get loaded twice. Now that I think about it, this isn't a solution to your problem... This solves the issue where you're logging in remotely (e.g. via ssh) and your `~/.bashrc` doesn't get loaded. You're not remotely logging in.
Curt Nelson
But when you open a terminal *normally*, it will load your `.bash_profile` then it will load your `.bashrc` (maybe opposite order). What you are doing will make it; `.bash_profile` which will load your `.bashrc` then it will load your `.bashrc`. Probably this doesn't matter but if you wanted to do a work around, you could have a var `$BASHRC_LOADED` in your `.bashrc` and enclose everything in `if(not($BASHRC_LOADED))`. *(sorry bad syntax)*
sixtyfootersdude
With the system I'm on now (Ubuntu 10.4) when I open a terminal it loads my `.bashrc` only. If I ssh into the same box, it loads my `.bash_profile`. I believe this is the way bash usually works. As a side note, for each user, Ubuntu sets up a `.profile` file (which gets loaded if `.bash_profile` doesn't exist) that sources your `.bashrc` if it exists, much like what I mentioned above.
Curt Nelson