2012-02-15 9 views
6

Me di cuenta de que a veces los comandos se pueden completar con pestañas.¿Cómo se implementa la finalización de tabulación para los comandos de Linux?

p. Ej. el comando xm en xen.

que tipo XM [espacio] [Tab] e imprime las opciones válidas que son:

addlabel  destroy   info   network-attach resume   sysrq   vnet-delete 
block-attach dmesg   labels   network-detach rmlabel   top    vnet-list 
block-detach domid   list   network-list save   trigger   vtpm-list 
block-list  domname   loadpolicy  new    sched-credit unpause   
cfgbootpolicy dry-run   log    pause   sched-sedf  uptime   
console   dump-core  makepolicy  reboot   serve   vcpu-list  
create   dumppolicy  mem-max   rename   shutdown  vcpu-pin   
debug-keys  getlabel  mem-set   resources  start   vcpu-set   
delete   help   migrate   restore   suspend   vnet-create 

Eso es bastante resbaladiza!

¿Cómo puedo implementar mi propia terminación del comando de pestañas en Linux?

+0

Esto es hecho por el shell. ¿Con qué shell estás preguntando? (Supongo que bash, ya que es el predeterminado en la mayoría de las distribuciones ahora). – Cascabel

+0

sí bash, y ahora he etiquetado mi pregunta con bash. ¿Es algún tipo de script de envoltura? – Matt

+2

Parece un duplicado de http://stackoverflow.com/questions/5570795/how-does-bash-tab-completion-work –

Respuesta

7

Ésta es una pregunta muy amplia, pero la idea general es que se registre algo o bien con el compgen o complete incorporado. Son both documented in the manual. La sección anterior documenta el tema general de programmable completion, repasando cómo se procesan los intentos de finalización.

Para ver toda una tonelada de ejemplos, consulte /etc/bash_completion, que proporciona toda la terminación predeterminada que viene con bash (más allá de las cosas totalmente integradas como la finalización del nombre de archivo). Para obtener más ejemplos, vea cualquier cosa en /etc/bash_completion.d; los obtiene automáticamente el /etc/bash_completion como una forma de extender la finalización predeterminada.

-1
+1

Cuando la mitad de su respuesta es un enlace a otra pregunta, generalmente es un signo que debe votar para cerrar como un duplicado, no para publicar una respuesta. (Si cree que el segundo enlace es útil, puede contribuirlo en alguna parte sobre esa pregunta.) – Cascabel

+0

@Jefromi. Bastante, pensé que no eran lo mismo, dado que la otra pregunta no contiene la solicitud para completarla, cómo funciona parte. El segundo enlace es lo que creo que se refiere a la segunda parte. –

+0

Sí, no es un duplicado * exacto *, pero creo que está lo suficientemente cerca; te apunta en la dirección correcta, especialmente dado que la respuesta menciona/etc/bash_completion, donde puedes encontrar un trillón de ejemplos.Si desea agregar una respuesta a la otra pregunta centrándose más en la implementación de cosas de finalización real, creo que sería valioso. – Cascabel

1

La finalización inteligente de bash se maneja mediante una serie de funciones bash con scripts. En Debian, probablemente Ubuntu, y tal vez otras distribuciones de Linux, puede encontrar las terminaciones instaladas de su sistema en /etc/bash_completion.d.

La documentación oficial sobre este mecanismo está en http://www.gnu.org/software/bash/manual/bash.html#Programmable-Completion

Cuestiones relacionadas