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.


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.


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




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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.