I actually want to know both these things since shells behave differently based on whether they are login or non-login, and/or interactive, non-interactive. See the following from the bash man page for an example (bash 3.2):
When bash is invoked as an interactive login shell, or as a non
+-interactive shell with the --login option, it first reads and execu
+tes
commands from the file /etc/profile, if that file exists. A
+fter 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.
When a login shell exits, bash reads and executes comman
+ds from the files ~/.bash_logout and /etc/bash.bash_logout, if the fi
+les
exists.
When an interactive shell that is not a login shell is started,
+ bash reads and executes commands from ~/.bashrc, if that file exis
+ts.
This may be inhibited by using the --norc option. The --r
+cfile file option will force bash to read and execute commands from f
+ile
instead of ~/.bashrc.
When bash is started non-interactively, to run a shell script,
+for example, it looks for the variable BASH_ENV in the environme
+nt,
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 th
+e file name.
So your link is useful for solving the interactive, non-interactive part of the puzzle, but I'm still keen to know how to solve the login/non-login part of the puzzle.
Thanks for the link.
|