Vervollständigung der benutzerdefinierten Bash-Registerkarte

34

Ich habe mein benutzerdefiniertes Konsolendienstprogramm cooltoolmit einer Liste von Optionen

fooOption
barOption

Was kann ich tun, um die Optionen durch Drücken der tabTaste automatisch zu vervollständigen ?

Ich meine, der Benutzer hat getippt

$ ./cooltool foo_

dann gedrückt tab. Und dann

$ ./cooltool fooOption _

erschien.

Wuffers
quelle
1
Post nicht überqueren.
Wuffers
2
Beachten Sie, dass dieser migriert wird und der andere nicht. Ich denke, viele Benutzer wissen immer noch nicht, dass sie keine Frage auf mehreren SE-Sites posten sollten. Sie werden verwendet, um Foren zu trennen, die kein einheitliches System sind, in denen Sie in einigen verschiedenen Foren nach einer besseren Chance auf eine schnelle Antwort fragen können.
Crawfordor

Antworten:

2

Schreiben Sie ein Bash-Abschlussskript für cooltool. Das Bash-Completion- Paket enthält Skripte für viele gängige Programme, die Sie als Beispiele verwenden können.

Grawity
quelle
40

Am einfachsten ist es, Ihrer .bashrc-Datei Folgendes hinzuzufügen.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

Bei jeder Eingabe cooltool f[TAB][TAB]wird die _cooltool()Funktion aufgerufen. Es wird herausgefunden, was Ihr aktuelles Teilwort ist und compgenwelche Optionen übereinstimmen. Diese werden in einem aufgerufenen Array gespeichert, COMPREPLYdas dann angezeigt wird. Schauen Sie man completeund man compgenfür Details.

Ein nettes Tutorial finden Sie hier: Schreiben Sie Ihre eigene Bash-Vervollständigungsfunktion

Dogbane
quelle
7

Vielleicht möchten Sie sich das Verzeichnis /etc/bash_completion.d auf Ihrem System genauer ansehen.

Auch sollten Sie diese Einführung lesen . Der zweite Teil der Einführung ist derjenige, den Sie brauchen.

AlexTheBird
quelle
1
Ich verwende Mac OS X 10.6, daher gibt es kein Verzeichnis
Ah ok, gut zu wissen.
2

Zusätzlich zur Antwort von dogbane können Sie auch Folgendes tun:

complete -W "fooOption barOption" cooltool

wenn Sie einfach eine Liste von Wörtern ab dem Anfang der Zeichenfolge abgleichen möchten. Es sieht so aus, als ob Vollständigkeit und Kompatibilität die meisten Optionen teilen. Ich habe nur bei den Befehlen, die ich verwende, eine Übereinstimmung mit dem Zeichenfolgenanfang festgestellt. Daher fand ich es gut, dass Sie in der _cooltool-Funktion andere Dinge tun können, wie z.

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

an einer beliebigen Stelle im Optionsnamen übereinstimmen.

dcc310
quelle