Login
Newsletter
Werbung

Do, 12. Juli 2007, 00:00

Ablegen und Wiederfinden

Eben steckt man mit seinen Gedanken noch in einem Projekt, da ergibt sich die Notwendigkeit, etwas Neues anzufangen. Mit etwas Shell-Code automatisiert man das soweit, dass man mit nur einem Befehl im gewünschten Projekt ist.

Das Problem

Oft habe ich das Problem, daß ich mehrere Projekte gleichzeitig am Laufen habe. Eben stecke ich mit meinen Gedanken noch in einem Projekt, da ergibt sich die Notwendigkeit, etwas Neues anzufangen. Kein Problem, mag man denken, ich mache ein neues Verzeichnis auf und da kommen die Unterlagen für das neue Projekt rein.

Leider ist das bei mir nicht ganz so einfach. Das geht schon los beim Namen des Verzeichnisses, eigentlich eine triviale Sache, möchte man meinen. Aber nenne ich das Verzeichnis für den neuen Artikel nun artikel_... oder ..._artikel? Wenn ich ein paar Tests mit einem Programm, einer Programmiersprache oder was weiß ich mache, nenne ich das dann test_perl_... oder perl_test_... oder ..._test.

O.K., irgendwann entscheide ich mich dann für einen angemessenen Namen. Aber wo lege ich das Verzeichnis dann ab? Und zwar so, daß ich es wiederfinde! Ehrlich gesagt sind das Probleme, über die ich mir keine Gedanken machen möchte. Ich will nur einfach etwas Neues machen und später vielleicht darauf zurückkommen. Aber einigermaßen portabel soll es auch sein. Und möglichst mit Bordmitteln zu bearbeiten.

Abhilfe

Schon vor Jahren kam mir beim Lesen von »A computational model of everything« [1] die Idee, neue Projekte unter dem Startdatum abzulegen. Gedacht, getan.

Unter meinem $HOME-Verzeichnis gibt es ein Verzeichnis archiv, unter dem ein Verzeichnis für das Jahr mit Verzeichnissen für jeden Monat, die wiederum Verzeichnisse für jeden Tag enthalten. Und wenn ich an einem Tag mehrere Sachen anfange, hänge ich an das Datum einen Suffix (a, b, ...), der hochgezählt wird. In dem Verzeichnis lege ich eine Textdatei namens .project an, in deren erster Zeile eine kurze Beschreibung des Projektes steht.

Gut, so kann es gehen. Ich will aber nicht jedes Mal nachdenken, welches Datum wir heute haben.

Ein Skript muß her. Ein Skript, das mir anzeigt, welche Projekte ich zuletzt bearbeitet habe, das mir gegebenenfalls ein neues Verzeichnis anlegt und mich auch gleich zu dem Verzeichnis hinbringt. Zu dem Verzeichnis hinbringen, auf gut Shell-Deutsch auch cd genannt, ist kein größeres Problem für ein Skript. Das Problem liegt darin, daß ich nach dem Beenden des Skripts in der Shell üblicherweise wieder da bin (in dem Verzeichnis), wo ich vorher war. So gesehen müßte das Skript eine neue Shell aufmachen, in der ich dann weiterarbeite. Das heißt, ich habe dann zwei zusätzliche Prozesse, um in das Verzeichnis zu kommen (einen, wenn die Shell via exec gestartet wird). Und beim nächsten Wechsel des Verzeichnisses wieder und so weiter und so fort. Das muß auch anders gehen.

Es geht, und zwar mit Backticks. Diese kleinen Anführungsstriche, die von links oben nach rechts unten gehen, werden von der Shell so interpretiert, daß die Standardausgabe des Kommandos dazwischen genau an dieser Stelle im aktuellen Kontext eingefügt wird. Nenne ich mein Programm nun mkdir_heute, dann kann ich durch einen Aufruf von

cd `mkdir_heute`

mit derselben Shell in das Verzeichnis wechseln, welches mkdir_heute zur Standardausgabe ausgibt. Das Skript steht zum Download bereit. Ich will aber das Verzeichnis aussuchen, in das ich wechsle. Dazu brauche ich einen anderen Ausgabekanal für das Programm. Folgendes Bild zeigt die Situation für ein Programm, das von der Shell via Backtick aufgerufen wird.

[Aufruf mit Backticks]

Mathias Weidner

[Aufruf mit Backticks]

Standardeingabe und Standardfehlerausgabe sind noch mit dem Terminal verbunden, während die Standardausgabe von der Shell ausgewertet wird.

Feintuning

Alles was ich nun noch brauche, ist ein Programm, das durch meine Tagesverzeichnisse geht, die erste Zeile der darin gefundenen .project-Dateien einliest, mir das alles auf stderr präsentiert und dann auf meine Eingabe von stdin wartet. Das sieht bei mir dann ungefähr so aus:

1 : 2007/04/18 : Artikel zu mkdir_heute
2 : 2007/04/13a : Energieverbrauch
3 : 2007/04/13 : PHoss
...
24 : 2006/03/21 : Archiv Nagios Workshop GUUG FFG2006
+(plus): neues Verzeichnis
q : aktuelles Verzeichnis

Offensichtlich habe ich am 13. April zwei Sachen neu angefangen. Bei Eingabe einer der Zahlen (und <Enter>) gibt das Skript das entsprechende Verzeichnis auf stdout aus und beendet sich.

Wenn ich + Beschreibung des Projekts eingebe, erzeugt das Skript ein neues Verzeichnis für das heutige Datum (gegebenenfalls mit Suffix a, b, ...), legt eine neue Datei .project darin an mit dem Text Beschreibung des Projekts. Anschließend gibt es das neue Verzeichnis auf stdout aus und beendet sich. Bei Eingabe von q gibt das Skript einen Punkt ».« aus, so daß die Shell in das aktuelle Verzeichnis wechselt.

Soweit so gut, nur möchte ich nicht jedesmal cd `mkdir_heute` eingeben müssen. In meiner ~/.bashrc habe ich daher die Zeile

alias cdheute='cd `mkdir_heute`'

und kann durch Aufruf von cdheute schnell dahin, wo ich gerade hin will.

Literaturverzeichnis

Nicholas Carriero and David Gelernter. A computational model of everything. Commun. ACM, 44 (11):77-81, 2001.

mkdir_heute (Perl-Skript)

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung