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