¿Cómo canalizar la lista de comandos mostrados por "pestaña completa"?


12

Cuando uso comandos en bash, me gusta la opción de doble pestaña para mostrar los comandos disponibles. Algunos comandos tienen más coincidencias posibles que otros:

Captura de pantalla de la finalización de una pestaña http://img13.imageshack.us/img13/5541/picturemhy.jpg

¿Hay alguna forma en que pueda canalizar la salida de la doble pestaña a alguna parte, como grep? Encontré una publicación relacionada , pero todavía no estoy seguro de cómo implementarla para canalizarla a grep.


¿Cómo exactamente imaginas que entrarías en la grepexpresión regular? (y or n or g[rep])? Odio sonar pesimista, pero dudo que esto se pueda hacer sin agregarlo al código bash.
Kevin

Respuestas:


21

Para comandos use compgen -c:

$ compgen -c bas
basename
base64
bashbug
bash
basename
base64
bashbug

Esta salida simplemente se puede canalizar grep.


+1 Para el comando ... La siguiente parte interesante podría ser cómo hacer un atajo de teclado para esto.
rozcietrzewiacz

3

Basado en la respuesta de @ salutis, creé un script que llamé compy almacené en las ~/bin/compbúsquedas commands', aliasesy builtins, (la opción marca -cabver la entrada bash man ), con un segundo parámetro opcional que, si está presente, canaliza la salida grepy busca el segundo parámetro

Usage: comp string [keyword-for-grep]

Código:

#!/bin/bash

if [ -z "$1" ]; then
    echo usage: comp string [keyword-for-grep]
    echo 
    exit
fi

if [ -z "$2" ]; then
    compgen -cab -- $1
    exit
fi

compgen -cab -- $1 | grep -i $2

Personalmente, también me interesaría encontrar una forma de eliminar el último comando del historial de shell en el script (algo relacionado con history -d) para que cuando bashbusque en el historial no encuentre compentradas. Sé que también puedo hacer esto, HISTIGNOREpero Linux es bastante poderoso, por lo que también debe haber una forma de hacerlo desde el archivo de script, ¿verdad?


1
Por supuesto, puede ajustar esto para satisfacer sus necesidades, pero debería ayudarlo a comenzar.
marca el

-3

¿Por qué no encuentras lo que estás buscando?

Ejemplo:

find / -name ec2* -executable -type f -perm -og+rx -print

Conociendo su caso de uso, puedo crear un ejemplo de comando más detallado.


2
En otras palabras, puede volver a implementar lo que haga la finalización de bash. Claro, pero eso no es práctico, y no se trata de eso.
Gilles 'SO- deja de ser malvado'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.