YAML поддерживает сложные структуры данных, которые не поддерживаются bash. Первый пример, который приходит на ум - это ассоциативные массивы.
Я бы предложил генерировать соответствующие структуры данных из Ruby и использовать их в bash.
. <(/path/to/your/ruby/script --generate-completion-data)
Вывод скрипта ruby при вызове с --generate-complete-data должен быть допустимым скриптом bash, определяющим переменные, которые вы будете использовать в скрипте / процедуре завершения
Например:
CMD_OPTS=(--help --print --version)
CMD_F_OPTS=(--audio --video)
И ваш скрипт завершения может выглядеть так:
. <(/path/to/your/ruby/script --generate-completion-data)
__is_file_opt {
for element in ${CMD_F_OPTS[*]};
if [[ $1 == $element ]]; then
return 0;
fi
done
return 1;
}
__ruby_script_complete {
local cur prev
COMPREPLY=()
#_get_cword is a function defined by /etc/bash_completion in Ubuntu, returns
# the current word to complete may not be available in your version
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
if [[ "$cur" == -* ]]; then
COMPREPLY=($( compgen -W "${CMD_OPTS[*]} ${CMD_F_OPTS[*]}" -- "$cur" ))
return 0;
fi
if __is_file_opt $prev; then
COMPREPLY=( $( compgen -f -- $cur ) \
$( compgen -d -- $cur ) )
fi
return 0
}
Примечание: приведенный выше скрипт не тестируется, это всего лишь пример