Bash Completion脚本用于在某些参数选项后完成文件路径
发布时间:2020-12-15 22:02:38 所属栏目:安全 来源:网络整理
导读:我正在为命令行工具编写一个bash完成脚本: _plink(){ local cur prev opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="--1 --23file --a1-allele --a2-allele --adjust --aec" if [[ ${cur} == --*file ]] ||
我正在为命令行工具编写一个bash完成脚本:
_plink() { local cur prev opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="--1 --23file --a1-allele --a2-allele --adjust --aec" if [[ ${cur} == --*file ]] || [[ ${cur} == --out ]]; then COMPREPLY=( $(compgen -W "$(ls)" -- ${cur}) ) elif [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 fi } complete -F _plink plink1.9 这个想法是在选项后面 – * file和–out,bash应该自动完成文件路径. 解决方法
您可以使用compgen -f来完成文件名,如下所示:
if [[ ${prev} == --*file ]] || [[ ${prev} == --out ]]; then COMPREPLY=( $(compgen -f -- ${cur}) ) elif ... 但是,compgen -f在完成文件名方面并不是很好,因为它不支持文件名中的空格. 更好的方法是使用bash-completion-lib中提供的_filedir函数.它可能已经在您的系统上可用(类型:declare -f _filedir to check). 使用_filedir,您的完成功能变为: if [[ ${prev} == --*file ]] || [[ ${prev} == --out ]]; then _filedir elif ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |