HomeSoftwareSpieleMusikForum

Kommandoersetzung

Eine Ersetzungsart, die es bei der zsh gibt und die man bei anderen Shells vermissen kann, ist die Kommandoersetzung. Dort wird ein Ausdruck der Form =name durch den absoluten Pfad des Kommandos name ersetzt, sofern er über den $PATH erreichbar ist. Damit ist es z.B. möglich, ausführbare Scripte zu editieren, ohne ihre genaue Lage zu kennen.

Man kann das zwar durch Konstruktionen der Art

vi $(which script)
verwenden, doch das ist ziemlich umständlich, vor allem, wenn mehrere solcher Ausdrücke in einem Kommando vorkommen.

Als Ersatz habe ich eine Funktion mit dem minimalistischen Namen p geschrieben. Sie geht davon aus, dass die übergebenene Parameterliste ein komplettes Kommando bildet. Zunächst wird jeder Parameter, der aus einem einfachen Namen besteht, über $PATH gesucht und ggf. durch seinen absoluten Pfad ersetzt. Danach ruft die Funktion das veränderte Kommando mittels eval auf.

Die Datei enthält noch eine Hilfsfunktion _p_complete und eine complete-Anweisung, die für den Bash-Vervollständigungsmechanismus gedacht sind. Sie bewirken, dass sich jeder Parameter, der den Namen einer ausführbaren Datei darstellt, nach Drücken der Tab-Taste in einen absoluten Pfad verwandelt.

Beispiele:

  1. Editieren des über $PATH erreichbaren Scripts myscript:
    p vi myscript
  2. Kopieren des Scripts unter dem Namen myscript1 ins aktuelle Verzeichnis:
    p cp -a myscript myscript1
  3. Kopieren von prog unter dem Namen prog1 in dasselbe Verzeichnis, in dem prog steht:
    p cp prog $(p dirname prog)/prog1
up
Created 2011-08-11 by mopcoge