Beauty and the Beast
When working in a UNIX/Linux/MacOSX environment, the command is often used to execute some tasks. The default shell in the Terminal.app (MacOSX) and in most other terminals, is the Bourne Again Shell aka bash.
Bash is intended to be a conformant implementation of the Shell and Utilities portion of the IEEE POSIX specification. Bash also incorporates useful features from the Korn and C shells (ksh and csh).
Screen is a full-screen text-based window manager with VT100/ANSI terminal emulation. It has the ability to detach shell sessions, which is extremely useful for executing remote processes or executing processes that should be terminated after log out or termination of the shell process itself.
my ~/.bashrc
First we start off with configuration the Bash configuration file, which is located at ~/.bashrc for the current user or at /etc/bashrc.bashrc for system-wide configurations.
Most users will just edit their own bashrc file.
The options defined in this file, have comments above them so I won’t re-explain them.
# define your local timezone export TZ='Europe/Brussels' # If not running interactively, don't do anything [ -z "$PS1" ] && return # don't put duplicate lines in the history. See bash(1) for more options export HISTCONTROL=ignoredups # ... and ignore same sucessive entries. export HISTCONTROL=ignoreboth # check the window size after each command and, if necessary, # update the values of LINES and COLUMNS. shopt -s checkwinsize # make less more friendly for non-text input files, see lesspipe(1) [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" # set variable identifying the chroot you work in (used in the prompt below) if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then debian_chroot=$(cat /etc/debian_chroot) fi # define all aliases in a separate file if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi # turn on bash completion, must be installed separately if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi # define some colors which will be used in PS1 and PS2 BLUE="[�33[0;34m]" LIGHT_GRAY="[�33[0;37m]" GREEN="[�33[0;32m]" LIGHT_BLUE="[�33[1;34m]" LIGHT_CYAN="[�33[1;36m]" YELLOW="[�33[1;33m]" WHITE="[�33[1;37m]" RED="[�33[0;31m]" NO_COLOUR="[�33[0m]" # if this shell was started in the screen command, use a different PS1 prompt if [[ $TERM =~ screen ]] ; then PS1="${GREEN}.oO( $BLUEh $GREEN|$BLUE w $GREEN)Oo"'[�33k][�33\]'".$NO_COLOUR " else PS1="${GREEN}.oO( $BLUEh $GREEN|$BLUE w $GREEN)Oo.$NO_COLOUR " fi PS2="$GREEN.oO($NO_COLOUR "
This local bashrc file enables some default settings and creates a fancy bash prompt in colour. (See screenshot)
Next we’ll set up the Screen configuration file.
my ~/.screenrc
The following Screen configuration file sets some options that I find useful. These options included:
- no splash screen at startup
- no visual bell
- a customized status bar at the bottom of the screen
- a huge scrollback buffer
- updated window names, based on the current command
- UTF8 encoding
The file will be saved in the user home directory, at ~/.screenrc
# some default settings startup_message off vbell off msgwait 1 defutf8 on compacthist on # Monitor windows defmonitor on activity "" # Turns off alternate screen switching in xterms, # so that text in screen will go into the xterm's scrollback buffer: termcapinfo xterm* ti@:te@ altscreen on # Enable 256 color terminal attrcolor b ".I" termcapinfo xterm 'Co#256:AB=E[48;5;%dm:AF=E[38;5;%dm' defbce "on" # Log 10000 lines defscrollback 50000 backtick 2 60 60 echo $USERNAME screen 0 shelltitle '. |bash' hardstatus alwayslastline '%{= .y}.oO(%{= .b}%2`@%H%{= .y})Oo. %{= .b}%{+} %= %-w %{= .yb} %n:[%t] %{= db} %+w %{= .y}time: [%c]' bindkey -k k2 screen # F2 | Create new window bindkey -k k3 prev # F3 | Previous Window bindkey -k k4 next # F4 | Next Window register r "^a:source $HOME/.screenrc^M" # | Goes with F5 definition bindkey -k k5 process r # F5 | Reload profile bindkey -k k6 detach # F6 | Detach from this session bindkey -k k7 copy # F7 | Enter copy/scrollback mode register t "^aA^aa^k^h" # | Goes with the F8 definition bindkey -k k8 process t # F8 | Re-title a window
In order to have updated window names, it is important that the above Bash configuration regarding the PS1 variable, has been enabled. If not, then there will be no updated window names!
This configuration file was used to create the following screenshot:
References
Some options were taken out of the Byobu configuration file, others were found on the Interweb.
Great tips – but please fix the screenshot 🙂
Fixed! 🙂