6 Tips für mehr BASH awesomeness

Mai 16th, 2010 § 7 comments § permalink

Hier ein paar Tips wie man die Bash-Shell pimpen kann:

1) History Search mit Pfeiltasten

Die wenigsten wissen, dass man in der History springen kann (wie mit den hoch/runter-Tasten), aber dabei nur die Einträge angezeigt bekommt, die mit der bereits getippten Zeile beginnen. Das liegt wohl daran, dass es standardmäßig keine Keymappings dafür gibt. Macht aber nix! Man kann sich das ganz leicht zusammenschrauben wenn man folgendes in seine ~/.inputrc einträgt:

# up arrow: go to previous line in history
# that starts with the typed characters
"\e[B": history-search-forward
# down arrow: opposite of up arrow
"\e[A": history-search-backward

Super praktisch. Must have. Und das beste daran: wenn man noch nichts eingetippt hat verhält sich das ganze wie gewohnt, man geht einfach die History rauf und runter.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

2) Case-Insensitive Tab Completion

Folgende Zeile in der ~/.inputrc ist auch äußerst empfehlenswert und bewirkt, dass man die Tab-Completion für Ordner und Dateien verwenden kann, selbst wenn man sich mit der Groß/Kleinschreibung vertan hat:

# case-insensitive tab completion
set completion-ignore-case on

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

3) GREP in Farbe

Jeder ernsthafte Bash-Nutzer verwendet mehrmals täglich grep. Man kann sich die gefundenen Stellen (standardmäßig Rot) hervorheben lassen, um leichter zu erkennen welcher String nun genau wo gefunden wurde. Dazu folgende Zeile in der ~/.bashrc bzw. ~/.bash_profile einfügen:

export GREP_OPTIONS="--color=always"

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

4) Man-Pages in Farbe

Ubuntu macht das glaub ich mittlerweile standardmäßig. Das ist aber kein Feature von "man", sondern liegt am verwendeten Pager. Wers haben will installiert "most" (ersatz für den standard-pager "less") und fügt folgende Zeile zu seiner ~/.bashrc bzw. ~/.bash_profile hinzu:

export PAGER="most"

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

5) Git und Mercurial-Branches im Prompt anzeigen lassen

Wer git oder mercurial für sein Source-Code-Management verwendet wird sich hin und wieder nicht ganz sicher sein, auf welchem Branch er sich gerade befindet. Für mich haben sich folgende Funktionen als sehr nützlich erwiesen:

# show current git branch
git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /'
}
# show current mercurial branch
hg_branch() {
    hg branch 2> /dev/null | awk '{printf "(%s) ",$1}'
}

Diese geben den aktuellen Branch in Klammern, gefolgt von einem Leerzeichen aus, wenn man in einem Repository ist. Falls nicht, geben sie einfach gar nichts aus, man wird also nicht permanent davon genervt. Verwendung in der ~/.bashrc bzw. ~/.bash_profile :

export PS1="\$(git_branch)${PS1}"

Damit sieht mein Prompt dann in einem Mercurial Repository z.B. so aus:

(default) user@host:my_repository$

und wenn ich nicht in einem Repository bin so:

user@host:/$

Man kann das auch noch farblich hervorheben. Dazu erstmal ein paar handliche Variablen für die Farben, muss ja nich jeder das Rad neu erfinden:

# default
NO_COLOR='\[33[0m\]'

# standard colors
BLACK='\[33[0;30m\]'  RED='\[33[0;31m\]'
GREEN='\[33[0;32m\]'  YELLOW='\[33[0;33m\]'
BLUE='\[33[0;34m\]'   MAGENTA='\[33[0;35m\]'
CYAN='\[33[0;36m\]'   WHITE='\[33[0;37m\]'

# emphasized colors
EBLACK='\[33[1;30m\]' ERED='\[33[1;31m\]'
EGREEN='\[33[1;32m\]' EYELLOW='\[33[1;33m\]'
EBLUE='\[33[1;34m\]'  EMAGENTA='\[33[1;35m\]'
ECYAN='\[33[1;36m\]'  EWHITE='\[33[1;37m\]'

# underlined colors
UBLACK='\[33[4;30m\]' URED='\[33[4;31m\]'
UGREEN='\[33[4;32m\]' UYELLOW='\[33[4;33m\]'
UBLUE='\[33[4;34m\]'  UMAGENTA='\[33[4;35m\]'
UCYAN='\[33[4;36m\]'  UWHITE='\[33[4;37m\]'

# background colors
BBLACK='\[33[40m\]'   BRED='\[33[41m\]'
BGREEN='\[33[42m\]'   BYELLOW='\[33[43m\]'
BBLUE='\[33[44m\]'    BMAGENTA='\[33[45m\]'
BCYAN='\[33[46m\]'    BWHITE='\[33[47m\]'

Wenn man jetzt das repository statt in der default-farbe lieber in grün haben will macht man das so:

export PS1="$GREEN\$(git_branch)$NO_COLOR${PS1}"

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

6) LS in Farbe

Last but not least noch ein Tip, um ls ein bisschen mehr Leben einzuhauchen. Manche Leute bekommen Augenkrebs, ich finde es praktisch, wenn Verschiedene Arten von Dateien verschiedene Farben bekommen. Unter Linux ganz einfach in die ~/.bashrc bzw. ~/.bash_profile eintragen:

alias ls='ls --color=auto'

# standard, directories, symlinks
LS_COLORS="no=00:di=34:ln=35:so=33"
# executables white with red background
LS_COLORS="ex=37;41:${LS_COLORS}"
# archives cyan
LS_COLORS="*.zip=36:*.rar=36:*.tar=36:*.gz=36:*.tar.gz=36:*.7z=36:${LS_COLORS}"
# source files green
LS_COLORS="*.c=32:*.cpp=32:*.rb=32:*.pl=32:*.php=32:${LS_COLORS}"
# header files yellow
LS_COLORS="*.h=33:*.hpp=33:${LS_COLORS}"
# object files grey
LS_COLORS="*.o=30:*.d=30:${LS_COLORS}"
export LS_COLORS

Alle verfügbaren Optionen und Farben sind hier gut aufgelistet, da kann dann jeder nach Lust und Laune rumbasteln wie er will.

Da Mac OS nicht die GNU coreutils (also ls, cp, mkdir, ...) verwendet sondern die BSD-Variante, die sich nicht so detailiert konfigurieren lässt, muss man hier erst die GNU coreutils mittels Macports nachinstallieren. Das Kommando dazu:

sudo port install coreutils

Wenn man das getan hat, sind die GNU coreutils verfügbar, indem man den gewohnten Kommandos einfach ein "g" voranstellt ( also z.B. gls, gcp, gmkdir ). Das bedeutet dass man das alias also folgendermaßen setzen muss:

alias ls='gls --color=auto'

Wer noch mehr awesomeness parat hat, ab damit in die Comments! Und jetzt viel Spass beim Ausprobieren wünscht euch euer Onkel Padde.

Where Am I?

You are currently browsing entries tagged with history search at maschinenraum.