Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Sep 2008 20:32:50 -0700
From:      Jeremy Chadwick <koitsu@FreeBSD.org>
To:        Jo Rhett <jrhett@netconsonance.com>
Cc:        freebsd-ports@FreeBSD.org
Subject:   Re: Incorrect commandline history with bash
Message-ID:  <20080924033250.GA71319@icarus.home.lan>
In-Reply-To: <47824C4F-78DE-41EB-A8C4-D0F7282803D0@netconsonance.com>
References:  <20080921215255.GA9622@icarus.home.lan> <34CFC7BB-E7D2-4B34-9D85-70F4C8E718E2@netconsonance.com> <20080922002229.GA12314@icarus.home.lan> <47824C4F-78DE-41EB-A8C4-D0F7282803D0@netconsonance.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Sep 23, 2008 at 11:45:07AM -0700, Jo Rhett wrote:
> On Sep 21, 2008, at 5:22 PM, Jeremy Chadwick wrote:
>> Everyone lecturing me needs to read, slowly, the INVOCATION part of  
>> the
>> bash man page.  The method I described above should become apparent
>> afterwards.
>
> I'm sorry if you feel I'm lecturing you -- I'm not.  I was just trying  
> to note that what you said seems to be backwards in my experience.   
> Moreover, the section of the man page you quoted backed up my analysis:
>
>> When  bash  is invoked as an interactive login shell, or as a non- 
>> interactive shell with the --login option, it
>>        first reads and executes commands 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.
>
> It does not read ~/.bashrc.   I have tested this and confirmed its  
> behavior.
>
> Now, I will go farther and mention the obvious:
>
>>  When  an  interactive  shell  that  is  not  a  login  shell  is  
>> started, bash reads and executes commands from
>>        ~/.bashrc, if that file exists.
>
> However, this file is only read when and if you type "bash" after you  
> are already logged into the system in question.
>
> In general, because of the way bash works, it would suggest that putting 
> variables you always want set in the .bashrc is correct, and sourcing it 
> from .bash_profile is also correct.   Variables (like terminal settings) 
> which are only applied during login should be set in .bash_profile.  
> Sourcing .bash_profile from .bashrc means you'd need some heft if/then 
> code to avoid playing havoc with your terminal settings.
>
> IMHO of course.

Thanks Jo.  It looks like in my case I do have my "files backwards" (for
lack of better phrasing), though I'm well aware of the difference
between a login and non-login interactive shell.  :-)

I don't do any "terminal tweaking" in any of my dotfiles (I rely solely
upon what PuTTY or SSH exports to the remote sshd via TERM).

Switching the logic I have (.bashrc containing what my old .bash_profile
did, and having .bash_profile source .bashrc) continues to work, as
documented.

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080924033250.GA71319>