Saturday, May 7, 2016

linux - What is the difference between a 'Login' and an 'Interactive' bash shell



What is the difference between a ‘Login’ and an ‘Interactive’ bash shell?
I have quoted Wikipedia below but can anybody give a better answer?




EDIT: This is a community wiki so maybe rather than voting to close you could provide examples of which situations call for which type of $SHELL




Startup scripts



When Bash starts, it executes the
commands in a variety of different
scripts.



When Bash is invoked as an interactive

login shell, 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.



When a login shell exits, Bash reads

and executes commands from the file
~/.bash_logout, if it exists.



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.
The --rcfile file option will force
Bash to read and execute commands from

file instead of ~/.bashrc.





Answer



In your login shell's profile files you can set up some things that you will use during your session, and which only need to be done once. Some ideas:




  • create a temporary file containing the IP address you connected from, later on you can include it in some scripts setting firewall rules.

  • run ssh-agent, ask for your SSH keys, and store the SSH agent environment variables in a file.


  • if that is a limited machine, and your co-workers want to be aware of each others logins, write(1) messages informing them of your login.



In a non-login shell's files (.bashrc) you should configure your shell:




  • Fancy prompt

  • set aliases

  • set history options

  • define custom shell functions


  • export environment variables, (maybe PAGER, EDITOR if system-wide settings suck)

  • load ssh-agent variables saved in .bash_profile



Usually, you would include .bashrc from .bash_profile with the following. Then login shell gets all your customizations, and .bash_profile file does not have to duplicate things that are already in .bashrc.



[[ -f ~/.bashrc ]] && . ~/.bashrc

No comments:

Post a Comment

linux - How to SSH to ec2 instance in VPC private subnet via NAT server

I have created a VPC in aws with a public subnet and a private subnet. The private subnet does not have direct access to external network. S...