2010-09-23 11 views
11

Tengo un conjunto de scripts en el directorio que existe en la ruta, por lo que puedo acceder a cada uno de ellos donde sea que esté. En algún momento, estos son scripts de utilidades muy simples que "vims" el archivo. De vez en cuando me gustaría ver rápidamente el contenido del archivo de script y ver la ruta al archivo que abre el script (luego make cat, grep ...).bash alias con argumento y autocompletado

Me gustaría hacer un alias que dará el guión dado "cat" donde sea que esté.
Dado que uno no está funcionando:
alias a="cat `which \$1`"
Si coloco el nombre del script en lugar del número del parámetro ($ 1), funciona bien. Pero con el parámetro no.

La segunda pregunta (¡ojalá la vida sea tan hermosa!) Sería obtener autocompletar el nombre del script para ese alias.
Usando una secuencia de comandos que podría existir en mi directorio "bin" sería otro enfoque que puedo tomar.

Respuesta

6

Si su función es llamada "foo", entonces su completi en la función podría tener este aspecto:

Si tiene el paquete de finalización Bash instalado:

_foo() { local cur; cur=$(_get_cword); COMPREPLY=($(compgen -c -- $cur)); return 0; } 

Si no lo hace:

_foo() { local cur; cur=${COMP_WORDS[$COMP_CWORD]}; COMPREPLY=($(compgen -c -- $cur)); return 0; } 

A continuación, a fin de que:

complete -F _foo foo 

El comando compgen -c hará que las terminaciones incluyan todos los comandos en su sistema.

Su función "foo" podría tener este aspecto:

foo() { cat $(type -P "[email protected]"; } 

lo que cat uno o más archivos cuyos nombres se pasan como argumentos.

+0

:-) Muchas gracias por la publicación. No acepté la respuesta antes de esperar encontrar un tiempo para probarla. Lo que estoy buscando. – Gadolin

6

Para el alias con el argumento, utilice function en lugar de los alias:

a() { cat `which $1` ;} 

O si lo hace en más de una línea, omita º punto y coma:

a() { 
    cat `which $1` 
} 

puede introducirlo de forma interactiva en el intérprete de comandos:

shell:>a() { 
>cat `which $1` 
>} 
shell:> 
+0

+1 Tengo esa solución. Sé mi héroe y cuéntame acerca de la finalización automática para esa función. Así que no tengo que ingresar el comando cada vez a mano. Ahora tengo finalización automática cuando invoco los comandos que están en la ruta. – Gadolin

Cuestiones relacionadas