GNU/Linux >> Tutoriels Linux >  >> Linux

10 exemples de commandes complètes Linux Bash_Completion utiles (achèvement de la ligne de commande Bash sur les stéroïdes)

Sous Linux, lors de la saisie d'une commande si vous appuyez deux fois sur TAB, toutes les commandes disponibles commençant par des caractères saisis seront répertoriées.

Ce n'est pas nouveau, vous le savez probablement déjà. Cette fonctionnalité est appelée complétion bash. La complétion de base des noms de fichiers et de répertoires est disponible par défaut dans la ligne de commande bash.

Mais, nous pouvons booster cette complétion bash et passer au niveau supérieur en utilisant la commande complete.

Ce didacticiel explique comment nous pouvons appliquer l'auto-complétion aux options et aux arguments de la commande à l'aide de la complétion programmable.

Par exemple, après avoir tapé la commande d'écriture, si vous appuyez deux fois sur la touche de tabulation, l'auto-complétion fournit la liste des utilisateurs pour effectuer l'opération d'écriture.

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

Dans l'exemple suivant, il afficherait les noms d'hôte disponibles pour la commande telnet :

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

Pour obtenir la complétion programmable dans votre terminal, il vous suffit d'exécuter /etc/bash_completion comme indiqué ci-dessous,

# . /etc/bash_completion

Vous pouvez également décommenter les lignes ci-dessous dans /etc/bash.bashrc (à partir d'ubuntu linux 13.04) afin de ne pas avoir à exécuter explicitement la commande ci-dessus,

 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

Si vous ne trouvez pas ces lignes et le fichier /etc/bash_completion, il vous suffit d'installer le package appelé bash_completion par apt-get

1. Afficher la complétion bash existante

Après avoir activé l'achèvement bash programmable, un ensemble d'achèvements bash est défini. La commande complete est utilisée pour définir l'achèvement bash.

Pour afficher la complétion bash existante, utilisez la commande complete comme indiqué ci-dessous.

 
complete -p | less

L'option -p est facultative dans l'exemple ci-dessus.

2. Liste des complétions standard dans Bash

Bash fournit par défaut la complétion standard suivante pour les utilisateurs Linux.

  1. Complétion de nom de variable
  2. Saisie du nom d'utilisateur
  3. Complétion du nom d'hôte
  4. Complétion du chemin d'accès
  5. Complétion du nom de fichier

Nous en avons discuté dans notre précédent article sur l'achèvement standard de bash.

3. Définir l'achèvement pour obtenir des commandes

Définissez une complétion avec la commande -c pour obtenir la liste des commandes disponibles en argument. Dans l'exemple suivant, la complétion est définie pour quelle commande,

$ complete -c which

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

Comme vu ci-dessus, en appuyant sur 'y', toutes les commandes seront listées.

4. Définir l'achèvement pour obtenir des répertoires

Avec l'option d, la complétion peut être définie pour n'obtenir que les noms de répertoires en argument. Dans l'exemple suivant, complétion définie pour ls,

$ ls
countfiles.sh  dir1/          dir2/          dir3/

$ complete -d ls

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

Comme vu ci-dessus, appuyer sur l'onglet ne vous montre que les répertoires.

5. Définir l'achèvement pour obtenir les noms des tâches en arrière-plan

Avec complete, il est également possible d'obtenir des noms de travaux en tant qu'arguments de commandes. L'option j est utilisée pour passer des noms de travail comme argument à la commande job comme indiqué ci-dessous,

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

$ complete -j ./list_job_attrib.sh

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

En parlant de tâches d'arrière-plan, vous devez également savoir comment gérer les tâches d'arrière-plan Linux à l'aide de ces exemples.

6. Complétion avec préfixe et suffixe

Les complétions peuvent être définies avec le préfixe souhaité à ajouter et le suffixe à ajouter aux complétions réelles. Dans l'exemple suivant, le préfixe et le suffixe sont définis pour 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. Achèvement de noms de fichiers et de répertoires avec exclusion

Considérez que le script termine son exécution, la sortie a été écrite dans un répertoire de sortie comme suit

$ cd output/

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

Dans ce qui précède, si vous devez ignorer les fichiers .tmp et .o pour l'auto-complétion avec la commande 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 est la variable shell qui contient le suffixe des noms de fichiers et ceux-ci sont exclus de l'auto-complétion.

8. Fractionner une chaîne par IFS pour obtenir des valeurs d'achèvement

La liste de mots peut être mentionnée avec l'option -W et celle-ci est divisée avec la valeur de la variable IFS. Ensuite, chaque mot résultant est développé et affiché pour être complété,

$ export IFS=" "

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

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

Comme indiqué ci-dessus, après avoir divisé la chaîne par délimiteur IFS, le mot est développé, il est donc également possible de les avoir comme variables, comme indiqué ci-dessous,

$ 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. Écrivez votre propre fonction pour générer l'achèvement

Il vous permet d'inclure une fonction pour définir l'achèvement. Avec l'option -F, le nom de la fonction est passé à la commande complète et il est exécuté pour générer des complétions. Par exemple, les fonctions sont écrites comme indiqué ci-dessous,

_parser_options()
{
  local curr_arg;

  curr_arg=${COMP_WORDS[COMP_CWORD]}

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

où dans la fonction ci-dessus,

  1. COMPREPLY :le tableau contient les résultats de complétion qui s'affichent après avoir appuyé sur [TAB][TAB]
  2. COMP_WORDS :tableau de mots qui est tapé sur la ligne de commande
  3. COMP_CWORD :l'index du tableau COMP_WORDS et l'utilisation de ces différents mots de position sur la ligne de commande sont accessibles.
  4. compgen :-W contient les complétions possibles et l'argument respectif est choisi en fonction de $current_arg

Cette fonction présente dans le fichier parser_option est extraite comme indiqué ci-dessous,

$ source parser_option

Liez cette fonction à votre script d'analyseur comme indiqué ci-dessous,

$ complete -F _parser_options ./parser.pl

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

Comme vu ci-dessus, les options des analyseurs sont générées par la fonction _parser_options().

Remarque :regardez /etc/bash_completion pour afficher plus de fonctions de complétion programmable.

10. Spécification secondaire lorsque le primaire n'en génère aucune

S'il n'y a pas de correspondances générées par la spécification de complétion définie, alors l'option comp est prise pour la complétion mentionnée avec l'option -o.

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

Comme ci-dessus, la complétion est définie avec la fonction _count_files pour le fichier ./countfiles.sh. Si la fonction _count_files() ne génère aucune correspondance, la complétion du répertoire est tentée.

$ ls 
countfiles.sh    dir1/      dir2/      dir3/

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

Linux
  1. Comment effacer l'historique de la ligne de commande BASH sous Linux

  2. 12 exemples de commandes Wget utiles sous Linux

  3. 25 exemples pratiques de commande de recherche utiles sous Linux

  4. 15 exemples pour maîtriser l'historique de la ligne de commande Linux

  5. 14 exemples de commandes "cat" utiles sous Linux

11 Exemples de commandes de date Linux utiles

Exemples de commandes Wget utiles dans le système Linux

15 exemples utiles de commande touch dans le système Linux

9 exemples utiles de commande tactile sous Linux

10 exemples utiles de la commande Sort sous Linux

12 exemples de commandes de date Linux utiles