Incorrect commandline history with bash

Jeremy Chadwick koitsu at FreeBSD.org
Wed Sep 24 03:32:53 UTC 2008


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 |



More information about the freebsd-ports mailing list