I have a lot of shell accounts; on my laptops and workstations, on my ARM build boxes, on remote servers, and so on. I don’t make a lot of customisations to my login shell as the lowest common denominator of OS X, FreeBSD and various Linux distros has trained me to live with what is on the host.
I do have two exceptions, bash
and screen
1. Handling my screen
config is easy; just scp
my .screenrc
file to the new host. Handling the small number of changes to my bash
setup is more involved as bash
has several places it looks in (.bashrc
, .bash_profile
, sometimes just .profile
) and those files may already exist on the host.
Recently I’ve been experimenting with the idea of using screen
to handle this customisation, which reduces the amount of configuration data copied to a new host to a single new file. Here is a sample .screenrc
from an ARM FreeBSD build box.
startup_message off vbell off # Window list at the bottom. hardstatus alwayslastline "%{wk}%-w%{Gk}[%n %t]%{wk}%+w%=%{Ck}%M%d %c%{-} %{=r} ${USER}@%H" # who needs .bashrc ? shell bash setenv PS1 "\[\e]0;\u@\h: \w\a\]\h(\w) % " setenv GOROOT /u/go setenv GOPATH $HOME # yup, screen can expand shell vars setenv PATH $PATH:$GOROOT/bin:$GOPATH/bin autodetach on term xterm-color termcapinfo xterm ti@:te@
Combined with ssh $HOST -t -- screen -R -D
, this makes setting up a new machine very simple.
1. Note to haters. I know that alternatives like zsh
and tmux
exist, but neither are installed by default on any mainstream distro, so until they are, I don’t care. At any rate, these suggestions probably apply equally well to your chosen shell and screen multiplexer.