#!/bin/bash # ~/.bashrc skeleton # ~/.bashrc runs ONLY on non-login subshells! (different from ksh) # add lines here very carefully as this may execute when you don't i # expect them to # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= #echo "BASHRC has run" # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # Source global definitions # if [ -f /etc/bashrc ]; then . /etc/bashrc else if ! shopt -q login_shell ; then # We're not a login shell for i in /etc/profile.d/*.sh; do if [ -r "$i" ]; then if [ "$PS1" ]; then . $i else . $i &>/dev/null fi fi done unset i fi fi umask 002 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # Find out system details. # os=`uname -o` #GNU/Linux AIX Solaris cpu=`uname -p` #x86_64 powerpc sparc kernel=`uname -s` #Linux AIX SunOS kversion=`uname -v` krelease=`uname -r` hostnm=`hostname` # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # Bash history # # don't put duplicate lines or lines starting with space in the history. # See bash(1) for more options HISTCONTROL=ignoreboth # append to the history file, don't overwrite it shopt -s histappend # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) HISTSIZE=1000 HISTFILESIZE=5000 # check the window size after each command and, if necessary, # update the values of LINES and COLUMNS. shopt -s checkwinsize # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # Terminal colors if interactive # if [ -n "$PS1" ]; then # # If there is no terminal info in the system for current terminal but there is # one in local terminfo then use it. # tput -T $TERM longname 2>/dev/null >/dev/null if [ "$?" -ne "0" ] && [ -f $HOME/.terminfo/$kernel/${TERM:0:1}/$TERM ]; then export TERMINFO=$HOME/.terminfo/$kernel; fi # # Number of colors and standard colors. # c_num=$(tput colors) # regular foreground c_red=$(tput setaf 1) c_green=$(tput setaf 2) c_orange=$(tput setaf 3) c_blue=$(tput setaf 4) c_pink=$(tput setaf 5) c_cyan=$(tput setaf 6) c_white=$(tput setaf 7) c_viol=$(tput setaf 12) # bold foreground #cbf_red=$(tput bold; tput setaf 1) # # Load better colors for ls. # if [ $c_num -ge 256 ] && [ -f ~/.dir_colors ]; then eval $(dircolors ~/.dir_colors) fi fi # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # Prompt if interactive # if [ -n "$PS1" ]; then # # Set better colors if available. # if [ $c_num -ge 256 ]; then c_reset="$(tput sgr0)" c_user="$c_green" c_cwd="$c_viol" c_time="$c_pink" c_branch="$c_cyan" c_exit="$c_red" c_jobs="$c_orange" else c_reset="$(tput sgr0)" c_user="$c_green" c_cwd="$c_viol" c_time="$c_pink" c_branch="$c_cyan" c_exit="$c_red" c_jobs="$c_orange" fi [ -n "$(which svn)" ] && prompt_check_svn=true [ -n "$(which git)" ] && prompt_check_git=true # # Colors should be set here and surrounded with \[\]otherwise bash fails to # calculate prompt length. The text is set through PROMPT_COMMAND PS1="\[$c_user\]\u@\h:" # username@host: PS1+="\[$c_time\]\t" # time PS1+=" \[$c_cwd\]\w" # working_dir PS1+="\[$c_branch\]\$git_text" # git branch PS1+="\[$c_branch\]\$svn_text" # svn revision PS1+="\[$c_exit\]\$exit_text" # exit status of last command PS1+="\[$c_jobs\]\$jobs_text" # background/suspended jobs PS1+="\[$c_reset\]\$ " # reset colors and print $ export PROMPT_COMMAND="__prompt_command; $PROMPT_COMMAND" function __prompt_command() { # # get exit code before any command is run. # TODO: doesn't work on pi. # local exit_code="$?" prompt_extra="" # # git branch if exist # if [ -n "$prompt_check_git" ]; then local git_branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null | tr -d ' ') if [ -n "$git_branch" ]; then git_text="[$git_branch]" else git_text="" fi fi # # svn branch if exist # if [ -n "$prompt_check_svn" ]; then local svn_rev=$(svn info . 2> /dev/null | awk -F ':' '/Revision:/ { print $2 }') if [ -n "$svn_rev" ]; then svn_text="[$svn_rev]" else svn_text="" fi fi # # exit code if not zero # if [ "$exit_code" -ne "0" ]; then exit_text="[exit=$exit_code]" else exit_text="" fi # # Info about jobs. # local jobs_bg=$(jobs -r | wc -l | tr -d ' ') local jobs_stopped=$(jobs -s | wc -l | tr -d ' ') if [ $jobs_bg -gt 0 ] || [ $jobs_stopped -gt 0 ]; then jobs_text="[bg:$jobs_bg,stp:$jobs_stopped]" else jobs_text="" fi } # Turn on checkwinsize shopt -s checkwinsize fi # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # User specific environment and startup programs # # # Set my paths. # if [ -e $HOME/local ]; then MYLOCAL=$HOME/local elif [ $kernel == Linux ] && [ -e $HOME/local-lnx ]; then MYLOCAL=$HOME/local-lnx elif [ $kernel == SunOS ] && [ -e $HOME/local-sun ]; then MYLOCAL=$HOME/local-sun fi if [ -e $MYLOCAL/bin ]; then export PATH=$MYLOCAL/bin:$PATH fi MYSCRIPTS=$HOME/devel/scripts if [ -e $MYSCRIPTS/bin ]; then export PATH=$MYSCRIPTS/bin:$PATH fi if [ -e $HOME/.local/bin ]; then export PATH=$HOME/.local/bin:$PATH fi # # VIM # export EDITOR=vim # # enable programmable completion features (you don't need to enable # this, if it's already enabled in /etc/bash.bashrc and /etc/profile # sources /etc/bash.bashrc). # if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi # # GIT # [ -f $MYSCRIPTS/bash/git-completion.bash ] && . $MYSCRIPTSE/bash/git-completion.bash # # colored GCC warnings and errors # export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # Aliases # if [ $kernel == AIX ]; then alias ls='ls -a' alias ll='ls -la' alias pd='pushd >/dev/null' alias bd='popd' else alias ls='ls -a --color=auto' alias ll='ls -la --color=auto' alias pd='pushd >/dev/null' alias bd='popd' alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' alias egrep='egrep --color=auto' fi function cgrep() { if [[ $# -eq 0 ]] then echo "Usage: codegrep " else grep -nR --colour \ --include=\*.cpp \ --include=\*.c \ --include=\*.hpp \ --include=\*.h \ --include=\*.inc \ --include=\*.php \ --include=\*.py \ --include=\*.sh \ --exclude-dir=.git \ --exclude-dir=.svn \ --exclude-dir=llcalc* \ --exclude-dir=00* \ "$1" . fi } function create_tags() { #Bloomberg if [ -e /opt/swt/bin/ctags ]; then CTAGS=/opt/swt/bin/ctags else CTAGS=ctags fi CTAGS_OPT='--recurse=yes ' CTAGS_OPT+='--verbose ' CTAGS_OPT+='--totals=yes ' CTAGS_OPT+='--tag-relative=yes ' CTAGS_DIR_CFG='.ctags_dir' CTAGS_ROOT="$PWD" if [ ! -f $PWD/$CTAGS_DIR_CFG ]; then GIT_ROOT=$(git top pwd) if [ -f $GIT_ROOT/$CTAGS_DIR_CFG ]; then CTAGS_ROOT="$GIT_ROOT" fi fi if [ -f $CTAGS_ROOT/$CTAGS_DIR_CFG ]; then CTAGS_SRC="-L $CTAGS_ROOT/$CTAGS_DIR" else CTAGS_SRC="$@" fi cd $CTAGS_ROOT $CTAGS $CTAGS_OPT $CTAGS_SRC cd - } # Add an "alert" alias for long running commands. Use like so: # sleep 10; alert alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # Run local settings. # [ -x $HOME/.bashrc.local ] && . $HOME/.bashrc.local # # Clean error level. # [ 1 ]