.bashrc .profile .bash_profile
Brandon Allbery
allbery at kf8nh.com
Thu Oct 1 17:21:07 PDT 2009
On Oct 1, 2009, at 17:41 , Scott Haneda wrote:
> I need to understand this once and for all, there is varying info on
> this, the bash man page is verbose and not entirely clear.
>
> 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.
>
> This implies, that only one of those files is read. That it stops
> once it finds one. I have:
> .bash_profile, .bashrc, and .profile
bash will read .bash_profile and .bashrc.
I would put bash-specific session-level information in .bash_profile,
portable (to e.g. zsh) session-level information in .profile, and
have .bash_profile source .profile. Per-shell information should go
in .bashrc. But I've been doing this stuff for a while, and I can
imagine people hndling single files better. (I also use the same
shell config files on every system I use, which is a rather wide array
of operating systems and versions.)
Normally it is a good idea not to put environment settings, stty
settings, etc. in .bashrc.
> I am pretty sure I need to stop using .bashrc, since that is for
> interactive non login shells, which I am interpreting as shells that
> do work that is not the result of me using the shell.
When you open a Terminal window, (by default) you get an interactive
login shell.
If you type "bash" in that shell, you get an interactive non-login
shell.
If you run vi and type ":!ls", vi will spawn a noninteractive shell to
run "ls". Noninteractive shells are also used by "make", "port", and
numerous other commands.
> Sounds to me, like the correct course of action is to put my custom
> shell aliases and settings
Shell aliases should be in .bashrc.
> This brings up a question, if the .bash* files do not cascade, and
> stop after finding your local one, how is it that MacPorts suggests
> to use .profile, as that will never get read?
MacPoerts assumes you don't use the shell-specific .bash_profile
or .bash_login, or if you do you also "source .profile". I would
consider the latter a best practice.
> On a side note, I am doing this:
> export LSCOLORS=dxfxcxdxbxegedabagacad
> Which has never worked for me on a non darwin OS.
On many systems it's LS_COLORS, not LSCOLORS, and it has a different
format.
> Is that the wrong way to do it, are there more appropriate ways to
> do coloring? I think having this in .bashrc actually hurt me ones,
> as MacPorts saw either:
> export CLICOLOR=1 or export CLICOLOR_FORCE=1
CLICOLOR_FORCE will probably cause scripts that use ls to break pretty
badly. MacPorts is itself implemented using scripts.
--
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery at kf8nh.com
system administrator [openafs,heimdal,too many hats] allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university KF8NH
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
URL: <http://lists.macosforge.org/pipermail/macports-users/attachments/20091001/d89f7062/attachment.bin>
More information about the macports-users
mailing list