0

我需要使用从 json 文件中读取的单词添加一些 bash shell 补全:

...
{
    'bundle': 'R20_B1002_ORDERSB1_FROMB1',
    'version':'0.1',
    'envs': ['DEV','QUAL','PREPROD2'],
},
{
    'bundle': 'R201_QA069_ETIQETTENS_FROMSAP',
    'version': '0.1',
    'envs': ['DEV','QUAL','QUAL2','PREPROD'],
}
...

要获取单词列表,我可以运行此命令行,它会从我的文件中返回所有预期的单词:

grep  'bundle' liste_routes.py | sed "s/'bundle': '//" | sed "s/',//" | grep -v '#' 

例如,使用附加的“grep R20”它会返回:

R20_B1002_ORDERSB1_FROMB1
R201_QA069_ETIQETTENS_FROMSAP
R202_LOG287_LIVRAISONSORTANTE_FROMLSP
R203_PP052_FULLSTOCKSAP_FROMSAP
R204_CO062_PRIXTRANSF_FROMOLGA
R206_LOG419_NOMENCLBOMPROD_FROMTDX
R207_CERTIFNFGAZ
R208_SAL363_ARTICLEPRICING_FROMSAP
R209_LOG451_WHSCON_FROMTDX

现在我把它放在这个 compgen 文件中,并在我的 bash 会话中获取它。

_find_routenames()
{
search="$cur"
grep  'bundle' liste_routes.py | sed "s/'bundle': '//" | sed "s/',//" | sed "s/\r//g" |  grep -v '#' | awk '{$1=$1;print}'
}

_esbdeploy_completions()
{
#local IFS=$'\n'

COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
cur="${COMP_WORDS[1]}"
COMPREPLY=( $( compgen -W "$(_find_routenames)" -- "$cur" ) )

#####  COMPREPLY=($(compgen -W "$(grep  'bundle' liste_routes.py | sed \"s/'bundle': '//\" | sed \"s/',//\" | grep -v '#')" -- "${COMP_WORDS}"))
}

complete -F _esbdeploy_completions d.py
complete -F _esbdeploy_completions deploy_karaf_v4.py
complete -F _esbdeploy_completions show.py

问题是当我输入

./d.py R20<TAB>

我得到了这些建议:

R201_QA069_ETIQETTENS_FROMSAP          R203_PP052_FULLSTOCKSAP_FROMSAP        R206_LOG419_NOMENCLBOMPROD_FROMTDX     R208_SAL363_ARTICLEPRICING_FROMSAP
R202_LOG287_LIVRAISONSORTANTE_FROMLSP  R204_CO062_PRIXTRANSF_FROMOLGA         R207_CERTIFNFGAZ                       R209_LOG451_WHSCON_FROMTDX

它错过了我的第一次 grep 测试中的 R20_B1002_ORDERSB1_FROMB1。我不认为它涉及下划线,因为其他带有“./d.py R10”的测试确实建议“R10_xxxx”。

4

0 回答 0