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.
nix parat aber oo-viel unix magic gibts auch hier: http://www.commandlinefu.com
paddepadde, du bist großartig! Now I love my Linux more than ever before. :)
nice bash finding!! thanx alot
*wave*
man-pages in farbe?? du ketzer :P
ich bin mac-user, bei mir ist alles bunt :D man muss nur aufpassen, dass man sich nicht zu sehr an die ganzen sachen gewöhnt, denn dann ist man plötzlich genervt wenn man mal auf ner fremden kiste arbeiten soll. das kennt man ja von den (zu recht) kastrierten router-linuxen...
also ich bin a gerade total begeistert von dem softwaretrio "more", "less" und "most".
less is most…
less more then most?