Markus Lindström wrote:
> Bob Proulx wrote:
> > Please be specific. What does "activated" mean? Does it mean that
> > you have this following alias in your ~/.bashrc file?
> >
> > eval `dircolors -b`
> > alias ls='ls --color=auto'
>
> Yes, that's the behavior I'm trying to obtain.
Does your ~/.bash_profile source your ~/.bashrc file? The default
skeleton contains the following commented out. Uncomment it.
# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
That will cause your login shell to source your .bashrc file.
Otherwise it won't be loaded at login time. I think that is the part
you are missing.
> I need to identify the config file that bash uses in the virtual
> consoles. Any ideas on this?
Let me repeat snippets from the bash manual in the "INVOCATION"
section. I will annotate.
: INVOCATION
: A login shell is one whose first character of argument
: zero is a -, or one started with the --login option.
On the virtual consoles my shells are login shells.
echo $0
-bash
As login shells the rules concerning them apply. This is in contrast
to xterm et al windows which are usually not login shells.
: 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 behav
: ior.
The virtual console invokes 'getty' which invokes 'login' which
launches '-bash' which looks at itself and sees the leading '-' and so
knows it is a login shell. It reads /etc/profile, one of
~/.bash_profile or ~/.bash_login or ~/.profile.
Notice that ~/.bashrc is not sourced in the above. I guess the
rationale goes that a user might want one thing one place and another
thing another place. But typically you will always want the .bashrc
sourced and will therefore need the following in your .bash_profile.
# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
That is part of the skeleton but commented out. You will need to
uncomment it in order to get your .bashrc filed when you log into your
account with a login shell. This also applies to logging in with ssh
and other network transports.
: When an interactive shell that is not a login shell is
: started, bash reads and executes commands from ~/.bashrc,
: if that file exists. This may be inhibited by using the
: --norc option.
Shells that are started by the window manager are not login shells
normally. However it is possible to specify them to be. I have seen
people be confused trying getting their .profile sourced and will
specify the terminal to start up login shells as one method. Better
to set up ~/.xsession to do this instead.
Shells that are not login shells will source ~/.bashrc file while
login shells will not unless specifically told to do so. However you
will almost always tell bash to source the ~/.bashrc file explicitly
in your ~/.bash_profile unless you really have a special purpose in
mind. I don't know why it is not the default in the skel file. But
since your ~/ is yours you can customize your ~/ files to do this
easily.
: When bash is started non-interactively, to run a shell
: script, for example, it looks for the variable BASH_ENV in
: the environment, expands its value if it appears there,
: and uses the expanded value as the name of a file to read
: and execute. Bash behaves as if the following command
: were executed:
: if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
: but the value of the PATH variable is not used to search
: for the file name.
Never set BASH_ENV. It is most often a source of breakage for
scripts.
: When bash is started in posix mode, as with the --posix
: command line option, it follows the POSIX standard for
: startup files. In this mode, interactive shells expand
: the ENV variable and commands are read and executed from
: the file whose name is the expanded value. No other
: startup files are read.
Never set ENV either for similar reasons. But ENV is required for ksh
users and sometimes follows ksh user's environment over when they
switch to bash. An easy mistake to make. But bash does not need it.
: Bash attempts to determine when it is being run by the
: remote shell daemon, usually rshd. If bash determines it
: is being run by rshd, it reads and executes commands from
: ~/.bashrc, if that file exists and is readable.
This is tricky to use and can get people in trouble. But the intent
is to make aliased commands and other environment available the same
as if you had logged in directly and run the command interactively.
For example a typical alias is 'alias ls=ll'. With that in place the
following works both locally and remotely.
ll
ssh example.com ll
The last piece of the puzzle is the ~/.xsession file. This controls
your graphical login. The best way to have your graphical terminal
shells load your environment is to have your .xsession file be invoked
as a login shell.
#!/bin/bash --login
exec x-session-manager
Make sure it is executable or it will have no effect.
chmod a+x $HOME/.xsession
With that in place your xsession will be invoked as a login shell so
/etc/profile and ~/.bash_profile will be sourced as illustrated above.
The shells started with each terminal window will source the ~/.bashrc
files and the environment will load exactly as one expects.
When you log into the xdm, kdm, gdm graphical login managers you have
a choice of selecting 'default' or of selecting a particular sesssion
such as 'kde', 'gnome', fvwm, etc. Make sure you select 'default' if
you want your envionment sourced. Selecting 'default' executes your
~/.xsession and the rest follows. Selecting a specific window manager
avoids ~/.xsession and sources only that window manager's files. That
is useful for when you have an error in your files which are
preventing you from logging into the system. But it can lead to
confusion.
Hope that helps.
Bob
Attachment:
pgp0aocQUoMzU.pgp
Description: PGP signature