GNU/Linux >> Linux Esercitazione >  >> Linux

10 utili esempi di comandi completi di Linux Bash_Completion (Completamento della riga di comando di Bash su steroidi)

In Linux, mentre si digita un comando se si preme TAB due volte, vengono elencati tutti i comandi disponibili che iniziano con i caratteri digitati.

Non è una novità, probabilmente lo sai già. Questa funzionalità è chiamata completamento bash. Il completamento del nome del file e della directory di base è disponibile per impostazione predefinita nella riga di comando di bash.

Ma possiamo potenziare questo completamento bash e portarlo al livello successivo usando il comando completo.

Questo tutorial spiega come applicare il completamento automatico alle opzioni e agli argomenti del comando utilizzando il completamento programmabile.

Ad esempio, dopo aver digitato il comando di scrittura, se si preme tab due volte, il completamento automatico fornisce un elenco di utenti per eseguire scrivere l'operazione.

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

Nell'esempio seguente, mostrerebbe i nomi host disponibili per il comando telnet:

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

Per ottenere il completamento programmabile nel tuo terminale, devi solo eseguire /etc/bash_completion come mostrato di seguito,

# . /etc/bash_completion

Puoi anche decommentare le righe seguenti in /etc/bash.bashrc(da ubuntu linux 13.04) in modo da non dover eseguire esplicitamente il comando precedente,

 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

Nel caso in cui non trovi queste righe e il file /etc/bash_completion, devi solo installare il pacchetto chiamato bash_completion di apt-get

1. Visualizza il completamento bash esistente

Dopo aver abilitato il completamento bash programmabile, sono definiti set di completamento bash. Il comando complete viene utilizzato per definire il completamento bash.

Per visualizzare il completamento bash esistente, usa il comando complete come mostrato di seguito.

 
complete -p | less

L'opzione -p è facoltativa nell'esempio precedente.

2. Elenco del completamento standard in Bash

Bash fornisce il seguente completamento standard per gli utenti Linux per impostazione predefinita.

  1. Completamento nome variabile
  2. Completamento nome utente
  3. Completamento nome host
  4. Completamento del percorso
  5. Completamento nome file

Ne abbiamo discusso nel nostro precedente articolo sul completamento dello standard bash.

3. Definisci il completamento per ottenere i comandi

Definisci un completamento con il comando -c per ottenere l'elenco dei comandi disponibili come argomento. Nell'esempio seguente, il completamento è definito per quale comando,

$ complete -c which

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

Come visto sopra, premendo 'y', verranno elencati tutti i comandi.

4. Definisci il completamento per ottenere le directory

Con l'opzione d, il completamento può essere definito per ottenere solo nomi di directory come argomento. Nell'esempio seguente, completamento definito per ls,

$ ls
countfiles.sh  dir1/          dir2/          dir3/

$ complete -d ls

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

Come visto sopra, premendo tab ti vengono mostrate solo le directory.

5. Definisci il completamento per ottenere i nomi dei lavori in background

Con complete, è anche possibile ottenere i nomi dei lavori come argomento dei comandi. L'opzione j viene utilizzata per passare i nomi dei lavori come argomento al lavoro di comando come mostrato di seguito,

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

$ complete -j ./list_job_attrib.sh

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

Parlando di lavori in background, dovresti anche sapere come gestire i lavori in background Linux usando questi esempi.

6. Completamento con prefisso e suffisso

I completamenti possono essere definiti con il prefisso desiderato da aggiungere e il suffisso da aggiungere ai completamenti effettivi. Nell'esempio seguente, il prefisso e il suffisso sono definiti per 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. Nome file e completamento directory con esclusione

Considera che lo script completa la sua esecuzione, l'output è stato scritto in una directory di output come segue

$ cd output/

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

In quanto sopra, se è necessario ignorare i file .tmp e .o per il completamento automatico con il 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 è la variabile della shell che contiene il suffisso dei nomi dei file e quelli vengono esclusi nel completamento automatico.

8. Dividi una stringa per IFS per ottenere valori di completamento

La lista di parole può essere menzionata con l'opzione -W e viene divisa con il valore nella variabile IFS. Quindi ogni parola risultante viene espansa e viene visualizzata per il completamento,

$ export IFS=" "

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

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

Come indicato sopra, dopo aver diviso la stringa per il delimitatore IFS, la parola viene espansa, quindi è anche possibile averli come variabili come mostrato di seguito,

$ 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. Scrivi la tua funzione per generare il completamento

Consente di includere una funzione per definire il completamento. Con l'opzione -F, il nome della funzione viene passato per completare il comando e viene eseguito per generare i completamenti. Ad esempio, le funzioni sono scritte come mostrato di seguito,

_parser_options()
{
  local curr_arg;

  curr_arg=${COMP_WORDS[COMP_CWORD]}

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

dove nella funzione precedente,

  1. COMPLETA:l'array contiene i risultati di completamento che vengono visualizzati dopo aver premuto [TAB][TAB]
  2. COMP_WORDS:array di parole digitato sulla riga di comando
  3. COMP_CWORD:indice per l'array COMP_WORDS e utilizzando questa diversa posizione è possibile accedere alle parole sulla riga di comando.
  4. compgen :-W contiene i possibili completamenti e il rispettivo argomento viene scelto in base a $current_arg

Questa funzione presente nel file parser_option viene originata come mostrato di seguito,

$ source parser_option

Collega questa funzione al tuo script parser come mostrato di seguito,

$ complete -F _parser_options ./parser.pl

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

Come visto sopra, le opzioni per i parser vengono generate dalla funzione _parser_options().

Nota:guarda /etc/bash_completion per visualizzare più funzioni per il completamento programmabile.

10. Specifiche secondarie quando la primaria non genera alcuna

Se non ci sono corrispondenze generate dalla specifica di completamento definita, l'opzione comp viene presa per il completamento menzionato con l'opzione -o.

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

Come sopra, il completamento è definito con la funzione _count_files per il file ./countfiles.sh. Se la funzione _count_files() non genera alcuna corrispondenza, viene tentato il completamento della directory.

$ ls 
countfiles.sh    dir1/      dir2/      dir3/

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

Linux
  1. 12 utili esempi di comandi Wget in Linux

  2. 25 Utili comandi find Esempi pratici in Linux

  3. ls Command in Linux:17 esempi utili spiegati

  4. 15 esempi per padroneggiare la cronologia della riga di comando di Linux

  5. 14 Utili esempi di comandi "cat" in Linux

11 Esempi utili di comandi data di Linux

Esempi utili di comandi Wget nel sistema Linux

15 esempi utili di comando touch nel sistema Linux

9 Esempi utili di Touch Command in Linux

10 esempi utili del comando di ordinamento in Linux

12 Esempi utili di comandi data di Linux