Ich suche nach einer Tab-Vervollständigung für meine Befehlszeilen-Aliase, zum Beispiel, sagen wir, ich habe den folgenden Alias definiert:
alias apt-inst='sudo aptitude install'
Gibt es eine Möglichkeit, die von aptitude bereitgestellten Vervollständigungen zu erhalten, wenn ich die Tabulatortaste drücke? Das heißt, wenn ich „sudo aptitude install gnumer“ schreibe und die Tabulatortaste drücke, vervollständigt aptitude dies zu gnumeric, oder listet bei Unsicherheit alle verfügbaren Pakete auf, die mit gnumer beginnen. Wenn ich es mit meinem Alias mache, nichts – keine Vervollständigung.
Akzeptierte Antwort:
Dazu gibt es im Ubuntu-Forum einen tollen Thread. Ole J schlägt die folgende Alias-Vervollständigungs-Definitionsfunktion vor:
function make-completion-wrapper () {
local function_name="$2"
local arg_count=$(($#-3))
local comp_function_name="$1"
shift 2
local function="
function $function_name {
((COMP_CWORD+=$arg_count))
COMP_WORDS=( "[email protected]" ${COMP_WORDS[@]:1} )
"$comp_function_name"
return 0
}"
eval "$function"
echo $function_name
echo "$function"
}
Verwenden Sie es, um eine Vervollständigungsfunktion für Ihren Alias zu definieren, und geben Sie diese Funktion dann als Vervollständigung für den Alias an:
make-completion-wrapper _apt_get _apt_get_install apt-get install
complete -F _apt_get_install apt-inst
Ich ziehe es vor, Aliase zu verwenden, um immer verwendete Argumente zu bestehenden Programmen hinzuzufügen. Zum Beispiel mit grep
, möchte ich Geräte und Binärdateien immer überspringen, also erstelle ich einen Alias für grep
. Zum Hinzufügen neuer Befehle wie grepbin
, verwende ich ein Shell-Skript in meinem ~/bin
Mappe. Wenn sich dieser Ordner in Ihrem Pfad befindet, wird er automatisch vervollständigt.