Автозаполнение переменных среды в bash командах (например, RAILS_ENV = тестовый пакет ...) - PullRequest
2 голосов
/ 08 мая 2020

Я хочу добавить некоторые имена переменных среды и возможное значение в список завершений в bash. Например, в Ruby on Rails я запускаю такие команды, как RAILS_ENV=test bundle exec rails db:migrate

Я хочу иметь возможность набирать
RAI<tab>
> завершение заполняется RAILS_ENV=
RAILS_ENV=te<tab>
> завершение заполняется RAILS_ENV=test

Иногда я могу использовать complete -W "my values" my_command для присоединения значений к определенной команде c, но здесь я не хочу присоединять их к команде, Я хочу, чтобы они были просто доступны, как и сам список команд.

Возможно ли это?

1 Ответ

2 голосов
/ 08 мая 2020

Вот пример, который требует удаления Bash 5.0+ и = из COMP_WORDBREAKS.

# tested with bash-5.0.16

_rails()
{
    local cmd=$1 cur=$2 pre=$3
    local -a envs=()
    local i

    for i in production test-foo test-bar; do
        envs+=( "RAILS_ENV=$i" )
    done

    if [[ $cur == R* ]]; then
        COMPREPLY=( $( compgen -W "${envs[*]}" -- "$cur" ) )
    fi
}

COMP_WORDBREAKS=${COMP_WORDBREAKS//=/}
complete -I -F _rails -o bashdefault

ПРИМЕЧАНИЕ:

  • Завершается до RAILS_ENV= только в том случае, если первое слово начинается с R.
  • Используя -o bashdefault, он может автоматически заполнять обычные имена команд.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...