born@shell

Wie manch einer weiß – was man aber im Blog kaum merkt –, studiere ich Computerlinguistik, ein Fach, dessen Beschreibung als „das, was Google macht“ genauso vage wie präzise ist. In dem Fach, in dem ich mich sowohl mit linguistischen Phänomenen als auch der computationellen Untersuchung dieser Phänomene beschäftige, sitze ich, wie der Name andeutet, sehr viel vor dem Computer. Und da kam mir eine Idee.

Wie in einem der ersten Beiträge angekündigt – und wie durch den Bloguntertitel angedeutet –, geht es hier auf dem Blog darum, meine Sicht der Dinge auf die Welt und das, was meine Welt ausmacht, zu präsentieren. Da ich nun schon etwas länger studiere (*hust*) und da ich mich mehr und mehr in die Untiefen von Computern begebe, fand ich es nur allzu passend, Euch auch diese Welt zu präsentieren.

Einleitend soll es dazu also einen kleinen Beitrag zu meiner Shell geben (Erklärung folgt), der gleichzeitig die neue Kategorie „Technisches“ einweiht, in der es um solche computerbezogenen Dinge geht. Wie man feststellen wird (heute noch nicht unbedingt – in anderen Beiträgen und/oder Tutorials schon), ist diese Welt eine, auch wenn nicht literarische, so denn doch textbasierte Welt, die zudem dem Ein oder Anderen unbekannt sein dürfte.


echo $SHELL

Die Shell ist die direkte und unverblümte Schnittstelle zu der Welt der Computerkommandos, die jedweder graphischen Oberfläche zugrundeliegt. Mit ihr kommuniziert man direkt Befehle an den Computer, daher ist die Shell auch als „Kommandozeileninterpreter“ bekannt.1 Man übergibt diesem Kommandozeileninterpreter seine textbasierten Befehle über die Eingabeaufforderung (prompt) einer Kommandozeile, welche als Konsole dargestellt wird.

Wenn man nun viel Zeit in dieser Welt der Shell verbringt, fängt man irgendwann an, Sachen wiederholt zu tippen, die eigentlich über eine Abkürzung viel angenehmer zu erreichen wären; des Weiteren möchte man vielleicht das Aussehen und das Layout der Kommandozeile den eigenen Gewohnheiten anpassen, um alles so im Blick zu haben, wie man es gerne hätte. Anpassungsmöglichkeiten ergeben sich daher durch das Hinzufügen eigener Kürzel und Funktionen und durch das Ändern des Aussehens der Kommandozeile.

Im heutigen Artikel möchte ich zum Einstieg den zweiten Aspekt, den man auch bash oder prompt customization nennt, kurz präsentieren.



source .bash_prompt

Wie angedeutet, denotiert ein prompt die Eingabeaufforderung, also den Bereich der Konsole, in den man seine Befehle tippt. Damit Ihr eine Vortsellung davon habt, wie das aussieht, zunächst einmal ein Bildschirmfoto (der Befehl pwd steht für print working directory, also die Ausgabe des Arbeitsverzeichnisses – dem Verzeichnis, in dem man sich befindet):

Bildschirmfoto 1. Eine sehr simple Eingabeaufforderung.

Bildschirmfoto 1. Eine sehr simple Eingabeaufforderung.

So sieht das schon einmal recht langweilig aus. Das richtige Arbeitsumfeld sieht bei jedem aktiven Programmierer/Entwickler natürlich anders aus und die Version, die ich Euch präsentieren möchte, stellt lediglich das Arbeitsumfeld da, mit dem ich am besten zurecht komme. Bevor aber die ausführliche Erklärung meines prompts folgt, werfe ich Euch zunächst einmal mitten in das Geschehen rein:

Bildschirmfoto 2. Meine eigene Eingabeaufforderung, der Benutzername ist aus Sicherheitsgründen ausgeschwärzt.

Bildschirmfoto 2. Meine eigene Eingabeaufforderung, der Benutzername ist aus Sicherheitsgründen ausgeschwärzt.

Wie wir sehen können, sind immer mindestens zwei Zeilen notwendig: die erste Zeile des prompts enthält ein paar grundlegende Infos und die zweite Zeile bietet dann das Eingabefeld für die konkreten Befehle (erkennbar an dem Dollarzeichen ($) am Beginn der Zeile). Darauf folgen dann optional ein oder mehrere Ausgabezeilen.

Die grundlegenden Infos sehen zum Beispiel so aus (sie sind farblich so codiert wie in meinem prompt, wobei gelb hier als leichtes orange dargestellt wird, damit man’s besser lesen kann und weiß hier schwarz ist aufgrund des anderen Hintergrunds; die Platzhalter sind mit <> abgegrenzt und alles Optionale steht in geschweiften Klammern):

[5]<benutzername>@Leos-MBP(22:17, Ⓜ46.5%):~/Documents/git/dotfiles {on master{*}}{▸▸▸▸▸▸▸▸▸▸}


Dabei gibt [5] die Anzahl der noch offenen Aufgaben in meiner Terminal-Todo-Applikation an; <benutzername> ist mein Benutzername, den ich oben aus Sicherheitsgründen geschwärzt habe; Leos-MBP ist mein Computername; 22:17 ist die Uhrzeit; Ⓜ46.5% ist die Auslastung des Arbeitsspeichers; ~/Documents/git/dotfiles ist der relative Pfad zum Verzeichnis, in dem ich mich befinde; master ist der aktuelle Projektzweig in einem git-Verzeichnis und * indiziert, dass Änderungen vorliegen2; und ▸▸▸▸▸▸▸▸▸▸ ist der Status der Batterie.

Das Aussehen des prompts wird in der Regel in einer (normalerweise) unsichtbaren Datei namens .bash_prompt definiert. Um die Änderungen effektiv umzusetzen, muss diese Datei bei jedem Öffnen eines Terminalfensters initialisiert werden; dies geschieht mit dem Befehl source .bash_prompt, der in der wiederum auch unsichtbaren Datei .bash_profile vorhanden ist.3


Schauen wir uns zum Abschluss noch zwei praktische Abkürzungen an, die oben verwendet wurden, g und d. Wie wir sehen können (Zeilen 1-3), ändert sich das Arbeitsverzeichnis aufgrund der Eingabe des einfachen Befehls g von ~ (dem sog. home-Verzeichnis) in ~/Documents/git, den Ort, an dem meine git-Projekte sind. Der Befehl d (drittletzte Zeile) bewirkt, dass ich im Verzeichnis ~/Desktop, also auf meinem Schreibtisch lande. Anders ausgedrückt, kann man von jedem Verzeichnis aus ganz einfach anhand eines Buchstabens in eigens definierte Verzeichnisse „springen“.

Solche einfachen Abkürzungen nennen sich in der Shell-Welt aliases, die z.B. in der Datei .bash_profile definiert sein können,4 und zwar so wie folgt:

alias g='cd ~/Documents/git'
alias d='cd ~/Desktop'


Dabei ist natürlich klar, dass man die Abkürzung so lang oder kurz gestalten kann, wie man möchte. Einer der Befehle könnte also genauso gut als alias gitdir='cd ~/Documents/git' definiert sein. Man sollte allerdings darauf achten, dass sich die eigenen Kürzel nicht mit schon vorhandenen Kommandos decken. Sonst kann es nämlich sein, dass man entweder integrierte Kommandos oder solche, die zusätzlich installiert worden sind, überschreibt und dann Funktionen oder Skripte, in denen solche Kommandos benötigt werden, das Falsche machen.

Da es zur Inspiration für die eigene bash customization viele Beispiele im Internet gibt,5 viele Leute aber ja nicht in der identischen Umgebung mit der gleichen Software wie man selber arbeiten, sollte man daher trotzdem immer darauf achten, z.B. eigene aliases individuell zu gestalten. Zum Beispiel habe ich für den Befehl git status das alias gs gesehen, was sich in meinem Fall aber mit dem Standardbefehl der Software Ghostscript gedeckt hat. Daher habe ich, wie im zweiten Bildschirmfoto zu sehen, das alias gst gewählt.

Und nun: exit


Mumon

—————————————————————

Fußnoten

1 Historisch gesehen gibt es viele Arten der Shell, wobei sich bash, die bourne again shell am weitesten etabliert hat und heute standardmässig auf vielen *nix-systemen läuft (z.B. Mac und Linux).

2 Die letzten beiden Infos werden natürlich nur dann gezeigt, wenn man sich in einem git-Verzeichnis befindet.

3 Diese Datei definiert die Standardeinstellungen der Shell. Manchmal heißt sie auch nur .profile oder .bashrc. In anderen Shells heißt sie wieder anders. Der Einfachheit halber beziehe ich mich im Haupttext nur auf .bash_profile.

4 Schöner und überschaubarer wäre es jedoch, definierte man sie in einer separaten Datei, z.B. .bash_aliases. Diese würde dann auch in .bash_profile aufgerufen werden müssen (source .bash_aliases).

5 Hier sind ein paar sehr schöne git-Verzeichnisse, die solche unsichtbaren, sog. dotfiles (da sie mit einem Punkt, dot, beginnen) für die bash customization enthalten: Mathias Bynens, Paul Irish, Simon Owen, and Zach Holman.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.