On 07/26/10 22:42, quoth Tim Chase: > On 07/26/10 21:26, Steven W. Orr wrote: >> Please! Never export anything from your .bashrc unless you >> really know what you're doing. Almost all exports should be >> done in your .bash_profile > > Could you elaborate on your reasoning why (or why-not)? I've found that > my .bash_profile doesn't get evaluated when I crank up another terminal > window, while my bashrc does. Thus I tend to put my exports in my > ~/.bashrc so they actually take effect in my shell... > > -tkc > >
I'm happy to elaborate, but people should feel free to stop me if they're not interested. The topic is bash: When you log in you get your .bash_profile and not the .bashrc. Subshells get the .bashrc and not the .bash_profile. If you set your envvars in your .bash_profile then you don't need to reset them in subshells because they all get inherited. (Inheritance of envvars is, after all, the reason that they are envvars and not just local variables.) The way you get your .bashrc to happen at login time is that you have to make it happen yourself. In your .bash_profile, just say this: . ~/.bashrc The one time that you should set an envvar in your .bashrc is when you are not an interactive shell. In that case you can set your PATH var in your .bashrc by first testing to see if you're interactive: In your .bashrc just say: [[ -z "$PS1" ]] && set_PATH_cmds # Of course, note that set_PATH_cmds is not a subprocess. It has to # be either a PATH= or function that accomplishes the same thing. This solves the problem of things like ssh somemachine cmd where cmd is something that you would only find on your PATH if you properly logged in. As far as X goes, I am starting from the premise that your X session will be set up to cause your .bash_profile to happen at login time. One last note: If you say something like export PATH=$PATH:/usr/local/bin then re-sourcing your .bash_profile will cause your PATH value to double up. That's why I set my PATH variable explicitly. After that, I encourage people to set up their PATH variables so that they are broken into four distinct sections in the following order. (The idea is to make your stuff override the system supplied stuff.) (The stuff below is just an example.) USERPERSONAL=~/bin:~/share/bin MACHINESPECIALS=/usr/local/bin:/usr/local/share/bin OPTIONALADDONS=/opt/Adobe/Reader9/bin:/opt/openoffice.org3/program VENDORPATHS=/bin:/usr/bin:/usr/X11R6/bin PATH=${USERPERSONAL}:${MACHINESPECIALS}:${OPTIONALADDONS}:${VENDORPATHS} -- Time flies like the wind. Fruit flies like a banana. Stranger things have .0. happened but none stranger than this. Does your driver's license say Organ ..0 Donor?Black holes are where God divided by zero. Listen to me! We are all- 000 individuals! What if this weren't a hypothetical question? steveo at syslang.net
signature.asc
Description: OpenPGP digital signature
-- http://mail.python.org/mailman/listinfo/python-list