What is a login shell
and interactive shell
, and what is a .bash_profile
and .bashrc
?
相关问题
- How to get the return code of a shell script in lu
- JQ: Select when attribute value exists in a bash a
- Invoking Mirth Connect CLI with Powershell script
- Emacs shell: save commit message
- bash print whole line after splitting line with if
相关文章
- 使用2台跳板机的情况下如何使用scp传文件
- In IntelliJ IDEA, how can I create a key binding t
- Check if directory exists on remote machine with s
- shell中反引号 `` 赋值变量问题
- How get the time in milliseconds in FreeBSD?
- Reverse four length of letters with sed in unix
- Launch interactive SSH bash session from PHP
- BASH: Basic if then and variable assignment
Since you probably know what a "shell" is and are using it your question only targets the difference between login shell and everything else...
A login shell only differs from any other shell by the fact that one or more initial setup scripts (resources) are loaded on startup, typically named with "profile" in their name. in there basic settings are defined that are derived to subsequently opened shells (so they only need to be defined once).
[gnu bash manual]
A login shell is a shell where you login. You can recognize a login shell from a
ps -f
listing, it will have a hyphen at the start of the program name, for example:An interactive shell is one which reads commands from it's standard-input, usually a terminal.
For example, if you login to bash using an xterm or terminal emulator like
putty
, then the session is both a login shell and an interactive one. If you then typebash
then you enter an interactive shell, but it is not a login shell.If a shell script (a file containing shell commands) is run, then it is neither a login shell nor an interactive one.
Start-up files are highly tailorable in bash:
When a login bash shell is invoked, then
/etc/profile
is sourced (executed in the current environment). After that, three files are checked for existence. The checks for these files are done in this order:if
/etc/profile
exists, source (run) itif
~/.bash_profile exists
, source (run) itif
~/.bash_login exists
, source (run) itif
~/.profile exists
, source (run) itOnce a match is found, the other files are ignored, even if they exist. The
/etc/bashrc
file might be used by both the~/.bash_profile
and the~/.bashrc
files. That would mean that the/etc/bashrc
file is sourced on all interactive invocations of bash, whether it is a login or non-login shell.So, the
.bashrc
file is also run every time you request a new interactive shell. This does not include a shell script. Normally variables, aliases or functions are placed in this file.Bash shell scripts read a different file if suitably instructed. If the user defines (usually in their own
.bash_profile
) a variableBASH_ENV
which contains a filename, scripts will read this. If this variable is not set (and exported) then bash scripts will not read any startup files.