GNU/Linux >> LINUX-Kenntnisse >  >> Linux

10 nützliche Linux Bash_Completion Complete-Befehlsbeispiele (Bash Command Line Completion on Steroids)

Wenn Sie unter Linux beim Eingeben eines Befehls zweimal TAB drücken, werden alle verfügbaren Befehle aufgelistet, die mit eingegebenen Zeichen beginnen.

Das ist nichts Neues, wahrscheinlich wissen Sie es bereits. Diese Funktionalität wird als Bash-Vervollständigung bezeichnet. Die grundlegende Vervollständigung von Datei- und Verzeichnisnamen ist standardmäßig in der Bash-Befehlszeile verfügbar.

Aber wir können diese Bash-Vervollständigung beschleunigen und sie mit dem Complete-Befehl auf die nächste Stufe bringen.

Dieses Tutorial erklärt, wie wir die automatische Vervollständigung auf Optionen und Befehlsargumente anwenden können, indem wir programmierbare Vervollständigung verwenden.

Wenn Sie beispielsweise nach der Eingabe des Schreibbefehls die Tabulatortaste zweimal drücken, liefert die automatische Vervollständigung eine Liste der Benutzer um den Schreibvorgang auszuführen.

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

Im folgenden Beispiel würden verfügbare Hostnamen für den Telnet-Befehl angezeigt:

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

Um eine programmierbare Vervollständigung in Ihrem Terminal zu erhalten, müssen Sie nur /etc/bash_completion wie unten gezeigt ausführen,

# . /etc/bash_completion

Sie können die folgenden Zeilen auch in /etc/bash.bashrc (ab Ubuntu Linux 13.04) auskommentieren, sodass Sie den obigen Befehl nicht explizit ausführen müssen,

 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

Falls Sie diese Zeilen und die Datei /etc/bash_completion nicht finden, müssen Sie nur das Paket namens bash_completion von apt-get

installieren

1. Vorhandene Bash-Vervollständigung anzeigen

Nach dem Aktivieren der programmierbaren Bash-Vervollständigung wird eine Reihe von Bash-Vervollständigungen definiert. Der Befehl complete wird zum Definieren der Bash-Vervollständigung verwendet.

Um die vorhandene Bash-Vervollständigung anzuzeigen, verwenden Sie den vollständigen Befehl wie unten gezeigt.

 
complete -p | less

Option -p ist im obigen Beispiel optional.

2. Liste der Standardvervollständigung in Bash

Bash bietet standardmäßig die folgende Standardvervollständigung für Linux-Benutzer.

  1. Variablennamen-Vervollständigung
  2. Vervollständigung des Benutzernamens
  3. Hostnamen-Vervollständigung
  4. Vervollständigung des Pfadnamens
  5. Dateinamenvervollständigung

Wir haben darüber in unserem früheren Artikel zur Bash-Standardvervollständigung gesprochen.

3. Abschluss zum Abrufen von Befehlen definieren

Definieren Sie eine Vervollständigung mit dem Befehl -c, um die Liste der verfügbaren Befehle als Argument zu erhalten. Im folgenden Beispiel wird die Vervollständigung für welchen Befehl definiert,

$ complete -c which

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

Wie oben zu sehen, werden durch Drücken von „y“ alle Befehle aufgelistet.

4. Abschluss zum Abrufen von Verzeichnissen definieren

Mit Option d kann die Vervollständigung definiert werden, um nur Verzeichnisnamen als Argument zu erhalten. Im folgenden Beispiel definierte Vervollständigung für ls,

$ ls
countfiles.sh  dir1/          dir2/          dir3/

$ complete -d ls

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

Wie oben zu sehen, zeigt Ihnen das Drücken der Tabulatortaste nur Verzeichnisse.

5. Abschluss zum Abrufen von Hintergrundjobnamen definieren

Mit complete ist es auch möglich, Jobnamen als Argumente für Befehle zu erhalten. Option j wird verwendet, um Jobnamen als Argumente an den Befehl job zu übergeben, wie unten gezeigt,

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

$ complete -j ./list_job_attrib.sh

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

Apropos Hintergrundjobs:Sie sollten anhand dieser Beispiele auch wissen, wie Sie Linux-Hintergrundjobs verwalten.

6. Vervollständigung mit Präfix und Suffix

Die Vervollständigungen können mit dem gewünschten hinzuzufügenden Präfix und dem an die tatsächlichen Vervollständigungen anzuhängenden Suffix definiert werden. Im folgenden Beispiel werden Präfix und Suffix für list_job_attrib.sh,

definiert
$ jobs 
[1]+  Stopped                 cat

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

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

$ ./list_job_attrib.sh ">cat<"

7. Dateiname und Verzeichnisvervollständigung mit Ausschluss

Bedenken Sie, dass das Skript seine Ausführung abschließt, die Ausgabe wurde wie folgt in ein Ausgabeverzeichnis geschrieben

$ cd output/

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

Wenn Sie oben die .tmp- und .o-Dateien für die automatische Vervollständigung mit dem Befehl ls ignorieren müssen, dann

$ 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 ist die Shell-Variable, die Suffixe von Dateinamen enthält und diese von der automatischen Vervollständigung ausgeschlossen werden.

8. Teilen Sie eine Zeichenfolge durch IFS, um Abschlusswerte zu erhalten

Die Wortliste kann mit der Option -W erwähnt werden und wird mit dem Wert in der IFS-Variablen geteilt. Dann wird jedes resultierende Wort erweitert und zur Vervollständigung angezeigt,

$ export IFS=" "

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

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

Wie oben erwähnt, wird das Wort nach dem Aufteilen der Zeichenfolge durch IFS-Trennzeichen erweitert, sodass es auch möglich ist, diese als Variablen zu verwenden, wie unten gezeigt,

$ 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. Schreiben Sie Ihre eigene Funktion, um die Vervollständigung zu generieren

Es ermöglicht Ihnen, eine Funktion einzuschließen, um die Vervollständigung zu definieren. Mit der Option -F wird der Funktionsname an den vollständigen Befehl übergeben und ausgeführt, um Vervollständigungen zu generieren. Beispielsweise werden die Funktionen wie unten gezeigt geschrieben,

_parser_options()
{
  local curr_arg;

  curr_arg=${COMP_WORDS[COMP_CWORD]}

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

wo in der obigen Funktion,

  1. COMPREPLY :Das Array enthält die Abschlussergebnisse, die nach dem Drücken von [TAB][TAB]
  2. angezeigt werden
  3. COMP_WORDS :Array von Wörtern, die auf der Befehlszeile eingegeben werden
  4. COMP_CWORD :Index für das Array COMP_WORDS und mit dieser Position kann auf Wörter auf der Befehlszeile zugegriffen werden.
  5. compgen :-W enthält die möglichen Vervollständigungen und das jeweilige Argument wird basierend auf dem $current_arg
  6. ausgewählt

Diese in der Datei parser_option vorhandene Funktion wird wie unten gezeigt bezogen,

$ source parser_option

Verknüpfen Sie diese Funktion wie unten gezeigt mit Ihrem Parser-Skript,

$ complete -F _parser_options ./parser.pl

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

Wie oben gesehen, werden die Optionen für Parser von der Funktion _parser_options() generiert.

Hinweis:Sehen Sie sich /etc/bash_completion an, um weitere Funktionen für die programmierbare Vervollständigung anzuzeigen.

10. Sekundäre Spezifikation, wenn Primäre keine erzeugt

Wenn durch die definierte Vervollständigungsspezifikation keine Übereinstimmungen generiert werden, wird die Comp-Option für die Vervollständigung verwendet, die mit der Option -o erwähnt wird.

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

Wie oben wird die Vervollständigung mit der Funktion _count_files für die Datei ./countfiles.sh definiert. Wenn die Funktion _count_files() keine Übereinstimmung generiert, wird versucht, das Verzeichnis zu vervollständigen.

$ ls 
countfiles.sh    dir1/      dir2/      dir3/

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

Linux
  1. So löschen Sie den BASH-Befehlszeilenverlauf in Linux

  2. 12 nützliche Wget-Befehlsbeispiele unter Linux

  3. 25 Nützliche praktische Beispiele für find-Befehle unter Linux

  4. ls-Befehl unter Linux:17 nützliche Beispiele erklärt

  5. 5 Standardvervollständigung Verfügbar in der Linux Bash-Befehlszeile

11 Nützliche Beispiele für Linux-Datumsbefehle

Nützliche Wget-Befehlsbeispiele im Linux-System

15 Nützliche Beispiele für Touch-Befehle im Linux-System

9 Nützliche Beispiele für Touch-Befehle unter Linux

10 Nützliche Beispiele für den Sort-Befehl in Linux

12 Nützliche Beispiele für Linux-Datumsbefehle