2010-04-11 6 views
7

Supere la pregunta anterior. La respuesta que voy a proporcionarme me llevó un tiempo para reconstruirla, pero todavía parece irremediablemente primitiva y hacky en comparación con lo que se podría hacer si la terminación se rediseñara para ser menos estática. Casi me da miedo preguntar si hay alguna buena razón para que la lógica de finalización parezca estar completamente divorciada del programa que está completando.¿Cómo agrupar la finalización de bash con un programa y hacer que funcione en el shell actual?

Respuesta

8

Escribí una biblioteca de línea de comandos (se puede ver in scala trunk) que le permite activar un interruptor para tener una opción "--bash". Si ejecuta

./program --bash 

Se calcula el archivo de finalización, lo escribe en un archivo temporal, y se hace eco de

. /path/to/temp/file 

a la consola. El resultado es que se puede usar acentos abiertos de este modo:

`./program --bash` 

y usted tendrá la finalización de "programa" en el shell actual, ya que se usa como fuente el archivo temporal.

Para un ejemplo concreto: echa un vistazo a scala trunk y ejecuta test/partest.

+3

Usted puede deshacerse de archivo temprary aquí mediante el uso de cadenas: fuente/dev/stdin <<< "$ (./ --bash programa)" –

+0

Sí, me había encontrado con eso, sino que en la formulación vi no funcionó en OSX. ¡Lo tuyo! Muchas gracias – extempore

+0

A partir del 2017-10-06 el enlace está muerto – Morgen

Cuestiones relacionadas