Das ultimative Shell-Setup

Als Softwareentwickler unter OSX und Linux ist die Kommandozeilen-Shell ein ständiger Begleiter. Sie macht vieles möglich, was per GUI unmöglich oder einfach vergleichsweise aufwändig ist. Dies gilt vor allem unter OSX, wo man mit dem Finder nur eine ziemlich beschränkte und unflexible GUI-Shell zur Verfügung hat. Zwangsweise darauf ausweichen muss man, um per SSH Linux-Server zu administrieren. Wie in der Welt der grafischen Oberflächen hat sich auch in der Welt der CLIs (Command Line Interfaces) viel getan. Viele Lösungen existieren eigentlich schon seit Jahren (z.B. zsh), werden aber viel weniger schnell adaptiert wie Verbesserungen des GUI. Da sind vor allem die OS-Hersteller und Linux-Distributoren schuld, die immer noch auf veraltete Standardeinstellungen setzen (Bash anstatt ZSH, keine Farb-Einstellungen etc.).

Installation

Um alles hier aufgeführte bequem zu installieren: siehe hier, im Git-Repo.

iTerm2

Viel besser als für OSX mitgelieferte Terminal App ist iTerm2. Es lässt z.B. ein “Hotkey Window” einrichten, dass auf eine Taste hin erscheint und wieder verschwindet. So hat man die Shell überall und immer verfügbar.

ZSH und Oh-my-ZSH

Ich benutze seit geraumer Zeit die ZSH (Z Shell) anstelle von Bash. Sie bietet viele benutzerfreundliche Verbesserungen, z.B. bei der Autovervollständigung. Die Killer-Applikation ist jedoch “Oh my Zsh” von Roby Russel. Das ist ein Paket von Scripts, Plugins und Themes für die Z-Shell. Installieren lässt es sich sehr einfach per Git:

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
# .zshrc ist das Äquivalent zu .bashrc
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
# default shell: bash durch zsh ersetzen
chsh -s /bin/zsh

Im Home-Verzeichnis gibt es nun den Ordner .oh-my-zsh, sowie die Datei .zshrc. Schaut euch die Datei mal in eurem Lieblings-Texteditor an. Die wichtigsten beiden Zeilen sind:

# Look in ~/.oh-my-zsh/themes/
ZSH_THEME="agnoster-joni"

plugins=(svn gnu-utils python sublime osx macports adb debian rvm)

Hier können also die Plugins und Shell Prompt Themes festgelegt werden. Unter ~/.oh-my-zsh/themes/ und ~/.oh-my-zsh/plugins/ finden sich die verfügbaren Prompt Themes und Plugins.

Promt Themes

Ich verwende hier agnoster-joni. Dies ist eine Zusammenführung agnoster-Themes (https://gist.github.com/3712874) und meines alten joni-Themes, das sich im angehängten Repo ebenfalls noch findet.

Wie es aussieht, probiert man am besten selbst aus. Nur einer von vielen Vorteilen von zsh ist, dass man auch ein Prompt für die Rechte Seite setzen kann. Ich zeige z.B. den Return Code des letzten Kommandos an, falls er nicht 0 (d.H. kein Fehler) war:

local return_code="%(?.. %{$bg[red]%}%{$fg[white]%}%? ↵ %{$reset_color%})"
RPROMPT="${return_code}"

Aliase

Shell Aliase dienen dazu, häufig benötigte Kommandos abzukürzen. Unter Oh-My-Zsh werden sie unter ~/.oh-my-zsh/custom abgelegt. Ich habe 4 Dateien, wobei anzumerken ist, dass ich diese Konfiguration unter Linux-Servern sowie auf meinem Macbook benutze:

  • aliases_global.zsh: Gelten für überall
  • aliases_linux.zsh: Nur unter Linux
  • aliases_osx.zsh: Nur unter OSX
  • aliases_local.zsh: Nur auf der lokalen Maschine. Im Repo gibt es nur aliases_local.zsh.example dabei, es wird vom Setup-Script nach aliases_local.zsh kopiert und sollte unbedingt angepasst werden.