[Xquartz-dev] env variables and launchd problem
Dave Ray
apple at jonive.com
Mon Mar 21 23:38:40 PDT 2011
> On Mar 21, 2011, at 17:29, Jordan K. Hubbard wrote:
>> On Mar 21, 2011, at 5:11 PM, Jeremy Huddleston wrote:
>>
>>> I think the problem is that you are setting the values in .bashrc. X11 inherits your *login* shell environment. This is set by .profile (not .bashrc).
>>
>> Actually, for bash, the login shell reads .bash_profile (and only that file - you need to explicitly load your .bashrc from within that file if you want it).
>
> Well it reads .profile if .bash_profile and .bash_login are absent ... unless in posix mode. For anyone caring, there is a book written on this topic in the INVOCATION section of bash(1), but here's a snippet:
>
> 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.
I am still stumped about this.
I understand everything you are describing.
My $SHELL is /bin/bash. The /etc/profile installed by Snow Leopard looks like this:
# System-wide .profile for sh(1)
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
if [ "${BASH-no}" != "no" ]; then
[ -r /etc/bashrc ] && . /etc/bashrc
fi
BUT
My /etc/bashrc contains:
export PATH="/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/bin:/usr/sbin:/opt/X11/bin:/usr/local/mysql/bin:/usr/local/git/bin:/usr/libexec:."
If I open an Apple terminal, then:
> echo $PATH
/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/bin:/usr/sbin:/opt/X11/bin:/usr/local/mysql/bin:/usr/local/git/bin:/usr/libexec:.
If I edit ~/.xinitrc.d/99-wm.sh to run just an xterm, with no window manager, then in that xterm:
> echo $PATH
/opt/X11/bin:/usr/bin:/bin:/usr/sbin:/sbin
That is the problem.
I don't have user-level files ~/.profile, ~/.bash_profile, or ~/.bash_login since I'm the only user of my laptop. But I shouldn't need to, if the shell is reading /etc/bashrc. When I copy /etc/bashrc to ~/.profile, etc, nothing changes. It is a launchd issue I think.
Dave
More information about the Xquartz-dev
mailing list