Bearbeiten: OK. Scheint, als hätte ich die Situation falsch verstanden. Dachten Sie meinten Programmoptionen wie in:
$ mplayer_alias -pla<tab><tab>
-playing-msg -playlist
$
Aber ich denke, es ist die Vervollständigung der Datei. Ich weiß es nicht, aber probieren Sie es aus.
Als schnelle Lösung sollte dies funktionieren:
complete -f -o default ee
Geben:
$ ee<tab><tab>
file1 file2 file3
$
ab programmierbaren Vervollständigungs-Builtins . ZB -X pattern
kann das nützlich sein. ZB ausschließen .swp
und .swo
Dateien:
complete -f -X '*.sw[op]' ee
nur zeigen .zip
, .ZIP
:
complete -f -o default -X '!*.+(zip|ZIP)' my_unzip_alias
Bei einigen müssen Sie möglicherweise eine shopt -s extglob
Konfigurationsdatei hinzufügen .
ALTE Antwort:
Sie könnten so etwas in Ihrem ausprobieren .bash_completion
.
Zumindest als Vorspeise.
Die Kernidee besteht darin, complete
den Alias einfach mit dem vorhandenen vollständigen Skript für das reale Programm hinzuzufügen . Hier gehe ich davon aus, dass sie alle im Format sind:
complete -F _complete_function_from_original program_name
Sie können das bekommen, was es ist, indem Sie Folgendes ausführen : complete -p program_name
. Am besten zuerst überprüfen.
Für einige Methoden wie apt-get
kann man nur Alias + Laden verwenden:
_load_comp_hack apt-get myalias
Für andere wie mplayer
einen braucht man einen Funktions-Wrapper, wie zB:
myalias() { mplayer "$@"; }
|
+--- Could be messy
Es ist durchaus möglich, dass es einen besseren Weg gibt, dies zu lösen, aber für meinen Gebrauch hat es gut funktioniert. Ich verwende es hauptsächlich für Wrapper-Skripte, bei denen ich die Funktionalität des ursprünglichen Programms erweitere. Habe es nicht für Aliase verwendet.
Ich fühle mich bei diesem Hack nicht sicher, aber Sie könnten sehen, ob es funktioniert.
_load_comp_hack()
{
local cc=
# Make sure completion scripts are sourced.
# Report error if source fail.
if . "/usr/share/bash-completion/completions/$1" >/dev/null 2>&1; then
# Extract the completion function used by the "real" program.
if cc="$(complete -p "$1" | cut -d' ' -f3)"; then
# Add it to the alias
complete -F "$cc" "$2"
return 0
fi
fi
echo "bash-completion '$1' for '$2' not found."
}
_load_comp_hack mplayer mplad
_load_comp_hack apt-get z
| |
| +----- Alias, script or function
+------------- Real function
Einige Programme verwenden eine allgemeinere Vervollständigung _longopt
, bei der die Quelldatei nicht gefunden wird. Normalerweise ist es auch nicht erforderlich, eine Quelle zu finden, daher könnte eine einfachere Variante sein:
_load_comp_hack()
{
local cc=
if cc=$(complete -p "$1" | cut -d' ' -f3); then
complete -F "$cc" "$2"
fi
}
Ein Problem hierbei, IIRC, ist, dass einige Abschlussskripte erst bei der ersten Ausführung geladen werden, wie in :
prog
tabtab. Alternativ können Sie es auch hinzufügen, else
wenn die Beschaffung von Dateien fehlschlägt.
/etc/bash_completion
?