Я хочу создать «скрипт завершения», который заменяет виртуальную команду (g
) другой командой (cd
).
Я хочу, чтобы g dl<Tab>
динамически преобразовывался в cd ~/dl/
.
Псевдоним - это не то, что я хочу, потому что я хочу продолжать печатать. Аргумент g
извлекается с использованием хранилища ключей / значений
Я пытался присвоить значения массиву $COMP_WORDS
для изменения написанного пользователем текста, но он не работает :
_g_completions() {
local FILE="$HOME/.config/kv.awk/bookmarks.txt"
local COMPLEN="${#COMP_WORDS[@]}"
if [ "${COMP_WORDS[$COMP_CWORD]}" -lt 3 ]
then
# list keys
COMPREPLY=($(compgen -W "$(awk '/^[A-Za-z]/ {print tolower($1)}' "$FILE")" -- "$CURRENT"))
else
# subsitute command
COMP_WORDS[0]="cd"
COMP_WORDS[1]="$(kv.awk bookmarks get "${COMP_WORDS[1]}")"
fi
}
complete -F _g_completions g