# Beispiel-Konfig-File für bash
#
# 22.3.2006

umask 077

if [[ -n $PS1 ]]
then
  # interaktive Shell

  # stty erase 
  stty kill "^U" intr "^C" eof "^D" susp "^Z" hupcl ixon ixoff -tostop -istrip

  # Bash-spezifische Einstellungen
  if (($UID))
  then
    # Prompt-Zeichen für Nicht-Root-Nutzer ist >
    pschar='$>'
  else
    # Prompt-Zeichen für Root-Nutzer ist #
    # Bei der Bash müssen wir im Gegensatz zur Z-Shell das $-Zeichen im
    # Prompt-String quotieren.
    pschar='\\$#'
      # Anmerkung: $pschar, also die Zeichenfolge
      #   \\$#
      # wird unten in den Wert von PS1 übernommen. Dabei wird \\ von der
      # Prompt-String-Dekodierung als Backslash gewertet. Nach der
      # Dekodierung steht also die Zeichenfolge
      #   \$#
      # in PS1. Diese wird wegen der gesetzten Option promptvars zu
      #   $#
      # expandiert. Würde der Backslash fehlen, würde $# durch die Anzahl der
      # Positionsparameter ersetzt.
  fi
  
  [[ -f /etc/bashrc ]] && source /etc/bashrc
  unset BASH_ENV

  if [[ $TERM == xterm* ]]
  then
    # Hinweis: Alle Zeichen, die bei ihrer Ausgabe keinen Platz auf dem
    # Bildschirm einnehmen, sind in \[ und \] einzuschließen, weil sonst die
    # readline-Bibliothek nicht ordentlich arbeiten kann.
    PS1="\[\e]2;\h:\w\a\e[7m\]\u@\h\[\e[0m\] \! $pschar "
  else
    PS1="\[\e[7m\]\u@\h\[\e[0m\] \W \! $pschar "
  fi

  HISTSIZE=20000
  HISTFILESIZE=$HISTSIZE
  HISTTIMEFORMAT="(%d.%m.%Y) %H:%M "
  HISTCONTROL=ignoredups
  HISTFILE=~/.bash_history
  unset IGNOREEOF
  shopt -s cmdhist
  shopt -s lithist
  shopt -s cdspell
  shopt -u nocaseglob
  shopt -s promptvars
  set -o noclobber
  set -P
fi

export EDITOR=vim
export LESSSECURE=1
export PAGER='less -Q'

unalias ls 2>/dev/null
function ls
{
  /bin/ls --color=never "$@"
}

# interne Funktion zum Durchsuchen der Prozess-Status-Liste
function psg_intern()
{
  $PS_CMD | sed 1d | $1 "$2" | fgrep -v "$1 $2"
}

# ps grep -- Ausgabe von ps nach AWK-Muster durchsuchen
function psg()
{
  psg_intern awk "/$1/"
}

# analog psg(), aber ohne Unterscheidung Groß-/Kleinschreibung
function psgi()
{
  psg_intern 'awk -v IGNORECASE=1' "/$1/"
}

alias ..='cd ..'
alias db=delbak
alias dc=cd
alias delbak='rm *.bak'
alias l='ls -l'
alias less='less -Q'
alias lt='ls -ltr'
alias mcopy='mcopy -v'
alias v='xdvi -geometry 1100x820'

# interne Funktion zur Überprüfung des PIPESTATUS
# $1 --> PIPESTATUS
# $2 --> optional; falls "0", dann Fehlermeldung unterdrücken
function check_pipe_error_intern()
{
  local i=1 rc
  for rc in $1
  do
    if ((rc))
    then
      [[ $2 != 0 ]] && echo "Fehler bei Pipe-Kommando $i (Rueckgabewert: $rc)"
      return 1
    fi
    ((i++))
  done
  return 0
}

# Überprüfung des PIPESTATUS, um einen Fehler in einer Pipe aufzuspüren
function check_pipe_error()
{
  check_pipe_error_intern "${PIPESTATUS[*]}" $1
} >&2
