split out shell into separate scripts to simplify usage