GNU/Linux >> Tutoriales Linux >  >> Linux

10 ejemplos útiles de comandos completos de Linux Bash_Completion (finalización de la línea de comandos de Bash en esteroides)

En Linux, mientras escribe un comando si presiona TAB dos veces, mostrará una lista de todos los comandos disponibles que comienzan con caracteres escritos.

Esto no es nada nuevo, probablemente ya lo sepas. Esta funcionalidad se denomina finalización de bash. La finalización básica del nombre del archivo y del directorio está disponible de forma predeterminada en la línea de comandos de bash.

Pero, podemos acelerar esta finalización de bash y llevarla al siguiente nivel usando el comando completo.

Este tutorial explica cómo podemos aplicar el autocompletado a las opciones y a los argumentos del comando usando el autocompletado programable.

Por ejemplo, después de escribir el comando de escritura, si presiona tabulador dos veces, el autocompletado proporciona una lista de usuarios para realizar escribir la operación.

$ write [TAB][TAB]
bala      raj
jason     randy
john      ritu
mayla     thomas
nisha     www-data

En el siguiente ejemplo, mostraría los nombres de host disponibles para el comando telnet:

$ telnet [TAB][TAB]
localhost  dev-db  fileserver

Para obtener la finalización programable en su terminal, solo necesita ejecutar /etc/bash_completion como se muestra a continuación,

# . /etc/bash_completion

También puede descomentar las siguientes líneas en /etc/bash.bashrc (desde ubuntu linux 13.04) para que no tenga que ejecutar el comando anterior explícitamente,

 enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

En caso de que no encuentre estas líneas y el archivo /etc/bash_completion, solo necesita instalar el paquete llamado bash_completion por apt-get

1. Ver finalización de bash existente

Después de habilitar la finalización de bash programable, se define un conjunto de finalización de bash. El comando complete se usa para definir la finalización de bash.

Para ver la finalización de bash existente, use el comando complete como se muestra a continuación.

 
complete -p | less

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

2. Lista de finalización estándar en Bash

Bash proporciona la siguiente finalización estándar para los usuarios de Linux de forma predeterminada.

  1. Finalización de nombre de variable
  2. Finalizar nombre de usuario
  3. Finalización de nombre de host
  4. Finalizar nombre de ruta
  5. Finalizar nombre de archivo

Discutimos sobre esto en nuestro anterior artículo de finalización estándar de bash.

3. Definir finalización para obtener comandos

Defina una finalización con el comando -c para obtener la lista de comandos disponibles como argumento. En el siguiente ejemplo, la finalización se define para qué comando,

$ complete -c which

$ which [TAB][TAB]
Display all 2116 possibilities? (y or n)

Como se vio arriba, al presionar 'y', todos los comandos aparecerán en la lista.

4. Definir finalización para obtener directorios

Con la opción d, la finalización se puede definir para obtener solo nombres de directorio como argumento. En el siguiente ejemplo, finalización definida para ls,

$ ls
countfiles.sh  dir1/          dir2/          dir3/

$ complete -d ls

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

Como se vio arriba, al presionar tabulador solo se muestran los directorios.

5. Definir finalización para obtener nombres de trabajos en segundo plano

Con complete, también es posible obtener nombres de trabajo como argumento para los comandos. La opción j se usa para pasar nombres de trabajo como argumento al trabajo de comando como se muestra a continuación,

$ jobs
[1]-  Stopped                 cat
[2]+  Stopped                 sed 'p'

$ complete -j ./list_job_attrib.sh

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

Hablando de trabajos en segundo plano, también debe saber cómo administrar trabajos en segundo plano de Linux usando estos ejemplos.

6. Finalización con Prefijo y Sufijo

Las terminaciones se pueden definir con el prefijo deseado que se agregará y el sufijo que se agregará con las terminaciones reales. En el siguiente ejemplo, el prefijo y el sufijo se definen para list_job_attrib.sh,

$ jobs 
[1]+  Stopped                 cat

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

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

$ ./list_job_attrib.sh ">cat<"

7. Finalización de nombre de archivo y directorio con exclusión

Considere que el script completa su ejecución, la salida se escribió en un directorio de salida de la siguiente manera

$ cd output/

$ ls
all_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txt
parser_mod.tmp  extract.o

En lo anterior, si necesita ignorar los archivos .tmp y .o para completar automáticamente con el comando ls,

$ 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 la variable de shell que contiene el sufijo de los nombres de archivo y estos se excluyen en la finalización automática.

8. Dividir una cadena por IFS para obtener valores de finalización

La lista de palabras se puede mencionar con la opción -W y se divide con el valor en la variable IFS. Luego, cada palabra resultante se expande y se muestra para su finalización,

$ export IFS=" "

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

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

Como se indicó anteriormente, después de dividir la cadena por delimitador IFS, la palabra se expande, por lo que también es posible tener estas variables como se muestra a continuación,

$ echo $SORT_TYPE1
bubble

$ echo $SORT_TYPE2
quick

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

9. Escriba su propia función para generar finalización

Le permite incluir una función para definir la finalización. Con la opción -F, el nombre de la función se pasa al comando completo y se ejecuta para generar finalizaciones. Por ejemplo, las funciones se escriben como se muestra a continuación,

_parser_options()
{
  local curr_arg;

  curr_arg=${COMP_WORDS[COMP_CWORD]}

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

donde en la función anterior,

  1. COMPREPLY:la matriz contiene los resultados de finalización que se muestran después de presionar [TAB][TAB]
  2. COMP_WORDS:matriz de palabras que se escribe en la línea de comando
  3. COMP_CWORD:índice para la matriz COMP_WORDS y se puede acceder al uso de estas diferentes palabras de posición en la línea de comando.
  4. compgen:-W contiene las posibles finalizaciones y el argumento respectivo se elige en función de $current_arg

Esta función presente en el archivo parser_option se obtiene como se muestra a continuación,

$ source parser_option

Vincule esta función a su script de analizador como se muestra a continuación,

$ complete -F _parser_options ./parser.pl

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

Como se vio anteriormente, las opciones para los analizadores se generan mediante la función _parser_options().

Nota:mire /etc/bash_completion para ver más funciones para la finalización programable.

10. Especificaciones secundarias cuando la primaria no genera ninguna

Si no hay coincidencias generadas por la especificación de finalización definida, entonces se toma la opción comp para la finalización mencionada con la opción -o.

$ complete -F _count_files -o dirnames ./countfiles.sh

Como arriba, la finalización se define con la función _count_files para el archivo ./countfiles.sh. Si la función _count_files() no genera ninguna coincidencia, se intenta completar el directorio.

$ ls 
countfiles.sh    dir1/      dir2/      dir3/

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

Linux
  1. Cómo borrar el historial de línea de comandos BASH en Linux

  2. 12 ejemplos útiles de comandos Wget en Linux

  3. 25 ejemplos prácticos útiles del comando find en Linux

  4. Comando ls en Linux:17 ejemplos útiles explicados

  5. 15 ejemplos para dominar la historia de la línea de comandos de Linux

11 ejemplos útiles de comandos de fecha de Linux

Ejemplos útiles de comandos Wget en el sistema Linux

15 ejemplos útiles de comandos táctiles en el sistema Linux

9 ejemplos útiles de Touch Command en Linux

10 ejemplos útiles del comando Sort en Linux

12 ejemplos útiles de comandos de fecha de Linux