¿Cómo puedo aprovechar las posibilidades de completar pestañas?

18

Cuando presiono tab en una consola obtengo esta salida

¿Mostrar todas las 2957 posibilidades? (sí o no)

¿Hay alguna forma de usar grepestas 2957 posibilidades? Me gustaría buscar todos los comandos con la palabra "svn" en ellos.

Adaptador UA
fuente

Respuestas:

21

La solución es el bash incorporado compgen. Para grep 'svn' de todos los comandos disponibles y los alias de comandos accesibles a través de $PATH, escriba.

compgen -ac | grep svn

¿Desea buscar desde un determinado prefijo (por ejemplo, todos los comandos que comienzan con ecrypt)? Usa expresiones regulares. .

compgen -ac | grep "^ecrypt"
Jjed
fuente
excelente respuesta, pero ¿qué pasa si uno quiere aprovechar las posibilidades de completar pestañas? Es decir, que no siempre es provocada por el nombre del comando, sino también por los parámetros de comando, etc.
UncleZeiv
2

Puedes intentar usarlo compgen.

Por ejemplo:

compgen -ac | grep "svn"
Rajesh Pantula
fuente
1

Esto debería ser equivalente:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done
Totaam
fuente
1
for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn

Muy similar a la respuesta de totaam, aparte de esto limita su alcance a los ejecutables (como lo hace Bash). Pero JJE compgenes otra milla mejor.

Oli
fuente
1

tal vez {,.}*svn*ayuda aquí, por ejemplo ls -l /usr/bin/{,.}*svn*<tab>.

Pero, ¡mira el Zsh! Aquí: http://www.jukie.net/bart/blog/zsh-tab-completion son algunos ejemplos excelentes de cómo puede ayudar a reducir los resultados de finalización de pestañas. Esto incluye también la negación, por ejemplo, si desea todos los resultados de finalización de tabulación sin la palabra "foobar", o todos los resultados con dígitos pares en primer lugar, finalización de tabulación subdirectorio y mucho más. La razón por la que cambié a zsh fue compartir la historia entre todos los terminales abiertos.

matemáticas
fuente
0

No conocía compgen, y habría sugerido:

ls -d ${PATH//:/\/*svn* } 2>/dev/null

para bash

${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
usuario desconocido
fuente