qed*_*qed 7 bash shell autocomplete
我正在为命令行工具编写一个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
Run Code Online (Sandbox Code Playgroud)
这个想法是,如果选项--*file和--outbash之后应该自动完成文件路径.现在我正在使用" $(ls)",它只完成当前工作路径中的文件名.有什么建议?
dog*_*ane 11
您可以使用它compgen -f来完成文件名,如下所示:
if [[ ${prev} == --*file ]] || [[ ${prev} == --out ]]; then
COMPREPLY=( $(compgen -f -- ${cur}) )
elif ...
Run Code Online (Sandbox Code Playgroud)
但是,compgen -f完成文件名并不是很好,因为它不支持文件名中的空格.
更好的方法是使用bash-completion-lib中的_filedir可用功能.它可能已经在您的系统上可用(类型:要检查).declare -f _filedir
使用_filedir,您的完成功能变为:
if [[ ${prev} == --*file ]] || [[ ${prev} == --out ]]; then
_filedir
elif ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3692 次 |
| 最近记录: |