10 consejos sobre la autocompletación de la línea de comandos en Linux

  

En los sistemas Linux, cuando escribe un comando y presiona TAB dos veces, se enumeran todos los comandos disponibles que comienzan con los caracteres que usted escribe. Esto no es nuevo, ya lo sabrás. Esta característica se llama finalización de bash de línea de comando. De forma predeterminada, la línea de comandos de bash puede completar automáticamente los nombres de archivos o directorios. Sin embargo, podemos mejorar la función de finalización del comando bash y llevarlo a un nuevo nivel con el comando completo.

Este tutorial muestra cómo podemos aplicar la finalización automática a las opciones o los argumentos de la línea de comandos utilizando la finalización de comandos programables.

Ejemplo: Después de ingresar el comando de escritura, si presiona el botón TAB dos veces, la función de finalización automática proporciona una lista de usuarios que pueden realizar operaciones de escritura. $ write [TAB] [TAB] bala rajjason randyjohn ritumayla thomasnisha www-data

En el siguiente ejemplo, se puede mostrar el nombre de host disponible para el comando telnet: $ telnet [TAB] [TAB] localhost dev-db Fileserver

Para que la función de finalización de comando programable funcione en su terminal, solo necesita ejecutar /etc /bash_completion de la siguiente manera: #. /Etc /bash_completion

También puede cancelar El siguiente comentario en /etc/bash.bashrc (del sistema Ubuntu Linux 13.04), por lo que no necesita ejecutar el comando anterior: ### habilitar la finalización de bash en shellsif! Shopt -oq posix interactivo; thenif [-f /usr /share /bash-completed /bash_completion]; luego. /usr /share /bash-completed /bash_completionelif [-f /etc /bash_completion]; luego. /etc /bash_completionfifi

Si no los encuentra El código, no encontró el archivo /etc /bash_completion, entonces solo necesita instalar el paquete bash_completion usando el comando apt-get.

1. Ver terminaciones de línea de comando existentes

Después de habilitar la función de finalización de línea de comando programable, ya hay algunas funciones de finalización de comando definidas. El comando completo se utiliza para definir la finalización de la línea de comandos.

Para ver las terminaciones de línea de comando existentes, use el comando completo de la siguiente manera: complete -p |  Menos

La opción -p en el ejemplo anterior es opcional.

2. Enumere las funciones de finalización estándar en bash

Herramienta de desarrollo eficiente para programadores: taza de programación herramienta de desarrollo eficiente para programadores: taza de programación

Bash por defecto, Bash es Los usuarios de Linux proporcionan las siguientes funciones de finalización estándar. 1. Finalización variable 2. Finalización del nombre de usuario 3. Finalización del nombre del host 4. Finalización de la ruta 5. Finalización del nombre del archivo

Comentamos esto en la finalización estándar de bash anterior.

3. Defina la finalización de un nombre de comando

Con la opción -c, puede usar todos los comandos disponibles como un parámetro de finalización para un comando. En el siguiente ejemplo, se define una terminación para el comando which (LCTT): Cuando presiona TAB dos veces, puede enumerar todos los nombres de comando como parámetros compensables. $ complete -c que

$ que [TAB] [TAB] Muestra todas las 2116 posibilidades? (s o n)

Igual que arriba, si presiona ‘ y ’, todo aparecerá en la lista El nombre del comando.

4. Definición de finalización de directorio

Con la opción -d, puede definir un parámetro de finalización que contenga solo el nombre del directorio. En el siguiente ejemplo, se define una terminación para el comando ls. $ lscountfiles.sh dir1 /dir2 /dir3 /

$ complete -d ls

$ ls [TAB] [TAB] dir1 /dir2 /dir3 /

Como arriba, incluso Al presionar TAB solo se mostrará el nombre del directorio.

5. Defina una terminación de nombre de tarea en segundo plano

La función Completa también puede usar el nombre de tarea como un parámetro de finalización. La opción -j puede definir el nombre de la tarea como un parámetro que se pasa al comando de la siguiente manera: $ jobs [1] - Stopped cat [2] + Stopped sed 'p'

$ complete -j ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB] [TAB] cat sed

Para tareas en segundo plano, puede consultar los ejemplos en la tarea en segundo plano de Linux para aprender cómo administrar las tareas en segundo plano.

6. Terminaciones con prefijos y sufijos

Las funciones completas definen prefijos y sufijos para las terminaciones reales. En el siguiente ejemplo, el prefijo y el sufijo del contenido de finalización se definen para list_job_attrib.sh. $ jobs [1] + Gato detenido

$ complete -P '" >' -S '< "' ./list_job_attrib.sh

$ ./list_job_attrib.sh [ ,null,null,3],PESTAÑA] [PESTAÑA]

$ ./list_job_attrib.sh " > cat < "

7. Con el nombre del archivo excluido y la terminación del nombre del directorio

Si Una vez que el script termina de ejecutarse, el directorio de salida es el siguiente: $ cd output /

$ lsall_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txtparser_mod.tmp extract.o

Igual que arriba, si desea ls La finalización del comando ignora los archivos .tmp y .o: $ export FIGNORE = '. Tmp: .o'

$ complete -f -d ls

$ cd output

$ ls [TAB] [TAB] all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt

FIGNORE es una variable de entorno que contiene los sufijos de nombre de archivo que deben excluirse para autocompletar.

8. División de una cadena con una variable IFS para obtener el valor de finalización

La lista de valores de finalización puede definirse con la opción -W y luego dividirse por la variable de entorno IFS. El resultado de la segmentación expande la variable y la muestra como una terminación. $ export IFS = " " "

$ complete -W " bubble quick " ./sort_numbers.sh

$ ./sort_numbers.sh [TAB] [TAB] bubble quick

Como se mencionó anteriormente, después de que la cadena se divide por el separador IFS, la variable incorporada se expande al valor de la variable, por lo que la variable se puede usar de la siguiente manera: $ echo $ SORT_TYPE1bubble

$ echo $ SORT_TYPE2quick

$ complete -W " $ SORT_TYPE1 $ SORT_TYPE2 " ./sort_numbers.sh$ ./sort_numbers.sh [TAB] [TAB] bubble quick

9. Escribe una función para generar el complemento Completo

Puede introducir una función para definir terminaciones. Use la opción -F para pasar el nombre de la función al comando completo, que ejecuta la función para generar la finalización. Por ejemplo, la función es la siguiente: _parser_options () {local curr_arg;

curr_arg = $ {COMP_WORDS [COMP_CWORD]}

COMPREPLY = ($ (compgen -W '-i --incluyendo -o - -outgoing -m --missed '- $ curr_arg));}

En la función anterior: 1.COMPREPLY: esta matriz controla el resultado que se muestra después de presionar TAB 2.COMP_WORDS: la matriz contiene comandos Alinee la palabra de entrada 3.COMP_CWORD: el índice de la matriz COMP_WORDS, úselo para distinguir la posición de la palabra a la que puede acceder la línea de comando. 4.compen: -W Proporciona posibles terminaciones y sus argumentos basados ​​en $ current_arg

En el archivo parser_option, e introducido con el comando fuente: $ source parser_option

Asocie esta función con su secuencia de comandos parser.pl: $ complete -F _parser_options ./parser.pl

$ ./parser.pl [TAB] [TAB] -i --incoming -o --outgoing -m --missed

Como antes, las opciones para parser.pl son generadas por la función _parser_options ().

Consejo: Verifique /etc /bash_completion para ver más funciones de finalización programables.

10. Cuando la primera regla no produce un resultado, use la segunda

Si la regla de finalización definida no genera una coincidencia, puede usar la opción -o para generar una finalización. $ complete -F _count_files -o dirnames ./countfiles.sh

Como arriba, la función de finalización de _count_files se define para ./countfiles.sh. La finalización del directorio se activa si la función _count_files () no genera ninguna coincidencia. $ ls countfiles.sh dir1 /dir2 /dir3 /

$. /countfiles.sh [TAB] [TAB] dir1 dir2 dir3

Copyright © Conocimiento de Windows All Rights Reserved