OK, un poco de historia: uso una Mac y hago todo lo posible en la CLI.
En particular, con frecuencia introduzco una memoria USB cp
o mv
un archivo, y luego deseo expulsarla (desmontarla y desconectarla) de inmediato. Esto generalmente se puede lograr con un puñado de teclas, a excepción de desmontarlo, lo que requiere (en 10.7) ir a un espacio de escritorio vacío (generalmente a dos espacios de distancia al menos), seleccionar el disco y presionar "comando-e". Francamente, este procedimiento desmontado es, en varios órdenes de magnitud, la parte más tediosa y tediosa del proceso.
Sería mucho más natural y eficiente simplemente poder escribir, por ejemplo:
ej<tab> J<tab>
Digamos que mi memoria USB se monta en / Volumes / Jefferson. Lo que esperaría obtener de mis 6 pulsaciones de teclas es lo siguiente:
eject /Volumes/Jefferson
Esto debería ejecutar el comando:
diskutil unmount /Volumes/Jefferson
Entonces, escribí una pequeña y bonita función:
eject() {
diskutil unmount /Volumes/$1
}
Y una función de finalización para acompañarlo:
compdef '_files -g "/Volumes/*"' eject
Sin embargo, hay un problema con esto. La _files
función genera rutas completas. Ahora, podría cambiar la línea en mi función de "expulsión" diskutil unmount $1
y las cosas funcionarían, pero no tengo la capacidad de escribir la primera letra del nombre del punto de montaje, ya que la ruta comienza con / Volumes /. Por ejemplo, si escribo J<tab
, obtendré autocompletado para los archivos en el PWD. Tendría que escribir /Volumes/J<tab>
para obtener la finalización deseada.
Entonces, ¿hay una función de finalización que tome nombres de archivos de una ubicación específica predefinida, en lugar de generar rutas completas?
Realmente me gustaría reducir esto a 6 pulsaciones de teclas.