我需要使用从 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”。