GNU/Linux >> Znalost Linux >  >> Linux

10 užitečných příkladů kompletních příkazů Bash_Completion pro Linux (Dokončení příkazového řádku Bash na steroidech)

Pokud v Linuxu při psaní příkazu dvakrát stisknete TAB, zobrazí se seznam všech dostupných příkazů, které začínají napsanými znaky.

Není to nic nového, pravděpodobně o tom už víte. Tato funkce se nazývá dokončení bash. Základní doplnění názvu souboru a adresáře je standardně dostupné v příkazovém řádku bash.

Ale můžeme toto dokončení bash přetížit a posunout ho na další úroveň pomocí kompletního příkazu.

Tento tutoriál vysvětluje, jak můžeme použít automatické dokončování na možnosti a argumenty příkazu pomocí programovatelného dokončování.

Pokud například po zadání příkazu write dvakrát stisknete tabulátor, automatické dokončování zobrazí seznam uživatelů pro provedení operace zápisu.

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

V následujícím příkladu by se zobrazily dostupné názvy hostitelů pro příkaz telnet:

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

Chcete-li získat programovatelné dokončení ve svém terminálu, stačí spustit /etc/bash_completion, jak je uvedeno níže,

# . /etc/bash_completion

Můžete také odkomentovat níže uvedené řádky v /etc/bash.bashrc (z ubuntu linux 13.04), abyste nemuseli explicitně spouštět výše uvedený příkaz,

 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

V případě, že nenajdete tyto řádky a soubor /etc/bash_completion, pak stačí nainstalovat balíček s názvem bash_completion pomocí apt-get

1. Zobrazit existující dokončení bash

Po povolení programovatelného dokončování bash jsou definovány sady dokončování bash. Příkaz complete se používá k definování dokončení bash.

Chcete-li zobrazit stávající dokončení bash, použijte příkaz complete, jak je znázorněno níže.

 
complete -p | less

Volba -p je ve výše uvedeném příkladu volitelná.

2. Seznam standardního dokončení v Bash

Bash ve výchozím nastavení poskytuje uživatelům Linuxu následující standardní dokončení.

  1. Dokončení názvu proměnné
  2. Dokončení uživatelského jména
  3. Dokončení názvu hostitele
  4. Dokončení názvu cesty
  5. Dokončení názvu souboru

O nich jsme hovořili v našem dřívějším článku o dokončení standardu bash.

3. Definujte dokončení pro získávání příkazů

Definujte dokončení pomocí příkazu -c, abyste získali seznam dostupných příkazů jako argument. V následujícím příkladu je definováno dokončení pro který příkaz,

$ complete -c which

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

Jak je vidět výše, stisknutím „y“ se zobrazí seznam všech příkazů.

4. Definujte dokončení pro získávání adresářů

S volbou d lze definovat dokončení tak, aby se jako argument dostaly pouze názvy adresářů. V následujícím příkladu je definováno dokončení pro ls,

$ ls
countfiles.sh  dir1/          dir2/          dir3/

$ complete -d ls

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

Jak je vidět výše, stisknutím tabulátoru zobrazíte pouze adresáře.

5. Definujte dokončení pro získání názvů úloh na pozadí

Po dokončení je také možné získat názvy úloh jako argumenty pro příkazy. Možnost j se používá k předání názvů úloh jako argumentu příkazové úloze, jak je znázorněno níže

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

$ complete -j ./list_job_attrib.sh

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

Když mluvíme o úlohách na pozadí, měli byste také vědět, jak spravovat úlohy na pozadí Linuxu pomocí těchto příkladů.

6. Dokončení pomocí předpony a přípony

Dokončení lze definovat s požadovanou předponou, která se má přidat, a příponou, která se přidá ke skutečným dokončením. V následujícím příkladu je předpona a přípona definována pro 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. Dokončení názvu souboru a adresáře s vyloučením

Vezměte v úvahu, že skript dokončí svůj běh, výstup se zapíše do výstupního adresáře následovně

$ cd output/

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

Pokud ve výše uvedeném případě potřebujete ignorovat soubory .tmp a .o pro automatické dokončování pomocí příkazu 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 je proměnná shellu, která obsahuje příponu názvů souborů a ty jsou při automatickém dokončování vyloučeny.

8. Rozdělte řetězec pomocí IFS, abyste získali hodnoty dokončení

Seznam slov lze zmínit pomocí volby -W a ta se rozdělí s hodnotou v proměnné IFS. Potom se každé výsledné slovo rozbalí a zobrazí se pro dokončení,

$ export IFS=" "

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

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

Jak je uvedeno výše, po rozdělení řetězce pomocí IFS delimetru se slovo rozšíří, takže je také možné mít tyto jako proměnné, jak je uvedeno níže,

$ 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. Napište svou vlastní funkci pro generování dokončení

Umožňuje zahrnout funkci pro definování dokončení. S volbou -F je název funkce předán do dokončení příkazu a ten se provede za účelem generování dokončení. Funkce je například napsána tak, jak je uvedeno níže,

_parser_options()
{
  local curr_arg;

  curr_arg=${COMP_WORDS[COMP_CWORD]}

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

kde ve výše uvedené funkci,

  1. COMPREPLY :pole obsahuje výsledky dokončení, které se zobrazí po stisknutí [TAB][TAB]
  2. COMP_WORDS :pole slov zadávaných na příkazovém řádku
  3. COMP_CWORD :index pro pole COMP_WORDS a pomocí těchto slov na různých pozicích na příkazovém řádku lze získat přístup.
  4. compgen :-W obsahuje možná dokončení a příslušný argument se vybere na základě $current_arg

Tato funkce přítomná v souboru parser_option získává zdroj, jak je ukázáno níže,

$ source parser_option

Propojte tuto funkci se skriptem analyzátoru, jak je uvedeno níže,

$ complete -F _parser_options ./parser.pl

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

Jak je vidět výše, možnosti pro analyzátory jsou generovány funkcí _parser_options().

Poznámka:Podívejte se na /etc/bash_completion pro zobrazení dalších funkcí pro programovatelné dokončení.

10. Sekundární specifikace, když primární negeneruje žádné

Pokud definovaná specifikace dokončení nevygeneruje žádné shody, pak se za dokončení uvedené s volbou -o použije comp-option.

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

Jak je uvedeno výše, dokončení je definováno funkcí _count_files pro soubor ./countfiles.sh. Pokud funkce _count_files() nevygeneruje žádnou shodu, dojde k pokusu o dokončení adresáře.

$ ls 
countfiles.sh    dir1/      dir2/      dir3/

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

Linux
  1. Jak vymazat historii příkazového řádku BASH v Linuxu

  2. 12 Užitečné příklady příkazů Wget v Linuxu

  3. 25 Užitečné hledání Příkaz Praktické příklady v Linuxu

  1. Příkaz ls v Linuxu:17 vysvětlení užitečných příkladů

  2. 5 Standardní dokončení K dispozici v příkazovém řádku Linux Bash

  3. 14 Užitečné příklady příkazů „cat“ v Linuxu

  1. 20 užitečných příkladů příkazů Docker v Linuxu

  2. 14 Užitečné příklady příkazů „ls“ v Linuxu

  3. 15 Příklady pro zvládnutí historie příkazového řádku Linuxu