gpt4 book ai didi

bash - bash 命令中的自动完成环境变量(如 RAILS_ENV=test bundle ...)

转载 作者:行者123 更新时间:2023-12-04 10:03:59 24 4
gpt4 key购买 nike

我想在 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将值附加到特定命令,但在这里我不想将这些附加到命令,我希望它们只是可用的,就像命令列表本身一样。

这可能吗?

最佳答案

这是一个需要 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 ,它仍然可以自动完成正常的命令名称。
  • 关于bash - bash 命令中的自动完成环境变量(如 RAILS_ENV=test bundle ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61682184/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com