Bash
The infamous Bash shell (bourne again shell) is the typical default command shell on Linux systems.
You can read up on how bash works using man bash
A great online reference for the set options (i.e. Built-in) can be found at
https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
Tips
Here is a tip. Bash will read different rc files on starting based on whether or not it is a "login" shell.
The difference is evident in the following example:
ssh host (a login shell is created i.e. /bin/bash -l) -vs- ssh host "echo true" (instead of executing a login shell the command echo true runs instead)
The first example (login shell) will read from /etc/profile then ~/.bash_profile for startup commands.
The second example will read from /etc/bash.bashrc then ~/.bashrc for startup commands.
So, long story short, I tend to put the salient commands in ~/.bashrc and source it from ~/.bash_profile
~$ cat ~/.bash_profile #Since .bashrc is not read when login over ssh we need this if [ -f ~/.bashrc ]; then . ~/.bashrc fi ~$ cat ~/.bashrc #Yes indeed, most bash customizations belong here export EDITOR=vim
ssh-agent
To get ssh-agent started cleanly on login, use a stanza like this in your .bashrc
SSH_ENV="$HOME/.ssh/environment" function start_agent { echo "Initialising new SSH agent..." #/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" #as above, but less quiet for debugging --mdf /usr/bin/ssh-agent > "${SSH_ENV}" echo succeeded chmod 600 "${SSH_ENV}" . "${SSH_ENV}" > /dev/null /usr/bin/ssh-add; } # Source SSH settings, if applicable if [ -f "${SSH_ENV}" ]; then . "${SSH_ENV}" > /dev/null #ps ${SSH_AGENT_PID} doesn't work under cywgin ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { start_agent; } else start_agent; fi
sh vs. bash vs. dash
You might think sh->bash but it (sometimes) links to dash. Be careful invoking /bin/sh in shell scripts that need bash functionality.