Я когда-либо делал что-то похожее, чтобы отобразить некоторые из curl
в одиночных настройках (например, -x
) в стиле GNU --long-option
.
Вот как это работает:
[STEP 101] # cat curl
function _compgen_curl()
{
local cmd=$1 cur=$2 pre=$3
local -a options=(\
'' --connect-timeout \
-k --insecure \
-m --max-time \
-o --output \
-O --remote-name \
-u --user \
-U --proxy-user
-x --proxy \
-y --speed-time \
-Y --speed-limit \
)
local -a options2=()
local i short long
for ((i = 0; i < ${#options[@]}; i += 2)); do
short=${options[i]}
long=${options[i+1]}
if [[ -z $short || -z $long ]]; then
options2+=($short$long)
else
options2+=($short,$long)
fi
done
if [[ $cur == - ]]; then
COMPREPLY=($(compgen -W "${options2[*]}" -- "$cur"))
elif [[ $cur == --* ]]; then
COMPREPLY=($(compgen -W "${options[*]}" -- "$cur"))
fi
}
complete -F _compgen_curl -o bashdefault -o default curl
[STEP 102] # . ./curl
[STEP 103] # curl -<TAB><TAB>
--connect-timeout -o,--output -u,--user -y,--speed-time
-k,--insecure -O,--remote-name -x,--proxy
-m,--max-time -U,--proxy-user -Y,--speed-limit
[STEP 103] # curl -
Не совсем то, что вы просили, но вы можете обновить его для собственных целей.
(я не уверен, если Баш может обрабатывать пробельные в результате завершения, но по крайней мере вы можете использовать _
или -
. :-)
'COMPREPLY = $ {_ compreply [@]}' 'должны быть COMPREPLY = ($ {_ compreply [@]}) '? – pynexj
Я думал, что zsh сделал что-то вроде этого. – Igor
@whjm: Я исправился по местному сценарию. Забыл исправить это в ответе. Спасибо, что заметили. :-) Исправлена. – anishsane