[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Pimp your shell - Debian developer tips?



Some notes from our defaults at $DAYJOB. I can't take credit for most of
this. These were ideas I've picked up from various people along the way.


# Prevent users from accidentally overwriting files with redirection.
set -o noclobber

Warning: While I'm the one that added it, sometimes I don't love
"noclobber".


# Fix some spelling errors in tab-completions
shopt -s cdspell
shopt -s dirspell

# Allow ** to recurse
shopt -s globstar 2> /dev/null

# Make globs case-insensitive
shopt -s nocaseglob

# Tell less to not ring the bell (Q) and pass through color escape
# sequences (R).
export LESS="QR"

# Save and show timestamps in the command history.
HISTTIMEFORMAT='%F %T '


We also colorize the hostname, which can act as a subtle hint as to
whether you are on the right system. (It's basically an subconscious
thing; it's not like we memorize which system is which color.) These
days, the per-host color is calculated with Jinja templating in Ansible.
The example below is the older code where bash calculates it. My email
client is going to word-wrap this, so you'll have to reverse that, but
it's straightforward.

# We use dircolors instead of tput to determine which types of terminals
# support colors.  Otherwise, we can end up with an inconsistency
# between bash and ls, et al.  For example: a vt100 on OpenIndiana.
if (LS_COLORS= ; eval $(dircolors 2> /dev/null) ; [ -n "$LS_COLORS" ])
then
    # Colorize based on hostname: green, yellow, blue, magenta, or cyan.
    ps_h='\[\e[1;'$((32 + $(hostname | cut -d. -f1 | cksum | cut -c1-3)
% 5))'m\]\h\[\e[0m\]'

    if [ "$(id -u)" = "0" ]
    then
        # Make the username and # red when logged in as root.

PS1='${debian_chroot:+($debian_chroot)}\[\e[1;31m\]\u\[\e[0m\]@'$ps_h':\w\[\e[0;31m\]\$\[\e[0m\]
'
    else
        PS1='${debian_chroot:+($debian_chroot)}\u@'$ps_h':\w\$ '
    fi

    unset ps_h

    if [ -r ~/.dircolors ]
    then
        eval "$(dircolors -b ~/.dircolors)"
    else
        eval "$(dircolors -b)"
    fi
    alias ls='ls --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi


It's not shown in the example above, but we also use white text on a red
background for the hostname if it ends in -new. This is our convention
when a new system is being setup: we set the hostname (in Ansible in our
case) for a system replacing a host named "name" to "name-new". This
prompt helps you keep track of whether you are on the current production
system or the -new system you are configuring. It is functionally
equalivalent to:
ps_h='\[\e[1;37m\]\[\e[1;41m\]\h\[\e[0m\]'

-- 
Richard

Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: