OK, ein kleiner Hintergrund: Ich benutze einen Mac und mache so viel wie möglich in der CLI.
Insbesondere stecke ich häufig einen USB-Stick cp
oder mv
eine Datei darüber und möchte sie dann sofort auswerfen (aushängen und trennen). Dies kann normalerweise mit wenigen Tastenanschlägen erreicht werden, mit Ausnahme des Aushängens, bei dem (in 10.7) ein leerer Desktop-Speicherplatz (normalerweise mindestens zwei Speicherplätze entfernt) aufgerufen, die Festplatte ausgewählt und "Befehl-e" gedrückt werden muss. Ehrlich gesagt ist dieses Unmount-Verfahren um mehrere Größenordnungen der zeitaufwändigste und langwierigste Teil des Prozesses.
Es wäre viel natürlicher und effizienter, einfach tippen zu können, sagen wir:
ej<tab> J<tab>
Sagen wir, mein USB-Stick wird bei / Volumes / Jefferson montiert. Was ich von meinen 6 Tastenanschlägen erwarten würde, ist Folgendes:
eject /Volumes/Jefferson
Dies sollte den Befehl ausführen:
diskutil unmount /Volumes/Jefferson
Also habe ich eine nette kleine Funktion geschrieben:
eject() {
diskutil unmount /Volumes/$1
}
Und dazu eine Vervollständigungsfunktion:
compdef '_files -g "/Volumes/*"' eject
Es gibt jedoch ein Problem damit. Die _files
Funktion generiert vollständige Pfade. Jetzt könnte ich die Zeile in meiner "Auswurf" -Funktion in ändern diskutil unmount $1
, und die Dinge würden funktionieren, aber dann kann ich den ersten Buchstaben des Mountpunktnamens nicht eingeben, da der Pfad mit / Volumes / beginnt. Wenn ich zum Beispiel tippe J<tab
, erhalte ich eine automatische Vervollständigung für die Dateien in der PWD. Ich müsste tippen /Volumes/J<tab>
, um die gewünschte Vervollständigung zu erhalten.
Gibt es also eine Vervollständigungsfunktion, die Dateinamen von einem vordefinierten, bestimmten Speicherort abruft, anstatt vollständige Pfade zu generieren?
Ich würde das wirklich gerne auf 6 Tastenanschläge reduzieren.