Я пытаюсь использовать встроенную команду bash complete, чтобы показать различные опции для команды.
У меня проблемы, когда опция содержит путь, как в -F/dev/null
.
В настоящее время я использую
#!/bin/bash
_xyz-completion ()
{
local cur
COMPREPLY=() # Array variable storing the possible completions.
cur=${COMP_WORDS[COMP_CWORD]}
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-oOption1 -F/dev/null" -- $cur ) )
;;
esac
return 0
}
complete -F _xyz-completion -o filenames xyz
Если -F
уже набрано, то Tab завершит его успешно.
Но если набрать только -
, то на вкладке 1016 * отобразится
null -oOption1
Но я ожидаю увидеть
-F / dev / null -oOption1
Я уже пробовал -F\/dev\/null
, -F//dev//null
, "-F/dev/null"
и -F\\\/dev\\\/null
Кажется, это только проблема с отображением, поскольку само завершение работает, как и ожидалось.
Я не вижу, как правильно экранировать косую черту в `-F / dev / null`.
Для комментирования комментариев:
1)
Не берите в голову, это также проблема, если -F заменен не опцией, такой как -Q. - Бенджамин В.
Это не проблема, что -F
выглядит как опция для complete
, так как он даже не работает, если я изменил его на xOPTION1 xF/dev/null
2)
Мне интересно, что compgen -W "-oOption1 -F / dev / null" - - отображает для вас.
Отображает (как и ожидалось)
-oOption1
-F / DEV / нуль
Как уже упоминалось, -F
успешно завершается до -F/dev/null