Bash switch/parameter 之后的文件名自动完成
Bash filename autocompletion after switch/parameter
我试过 this other questions's accepted answer 但它对我不起作用。所以请不要将此投票为重复。
我的脚本名为 "tracker",它接受以下开关:--dummy --audit_sessiones --user_count --detailed_user_count --parfile
--parfile
switcj 后面应该跟一个文件名。
我有这个自动完成脚本:
_tracker()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--dummy --audit_sessiones --user_count --detailed_user_count --parfile"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
opts="ls *"
if [[ ${prev} == --parfile ]]; then
COMPREPLY=( "${files[@]##*/}" )
return 0
fi
}
complete -F _tracker tracker
开关的自动完成工作正常。
但我也希望用户能够在参数 --parfile
之后立即使用文件名自动完成功能,但我无法使其工作。
尝试用 COMPREPLY=( $(compgen -f ${cur}) )
替换 COMPREPLY=( "${files[@]##*/}" )
可以在以下链接中找到有关自动完成的更多信息
complete
有一个 -o default
选项,因此您可以删除 opts="ls *"; if ... fi
部分并只执行 complete -F _tracker -o default tracker
.
根据 bash 手册:
If the -o default
option was supplied to complete
when
the compspec was defined, readline's default completion will
be performed if the compspec (and, if attempted, the default
bash completions) generate no matches.
我试过 this other questions's accepted answer 但它对我不起作用。所以请不要将此投票为重复。
我的脚本名为 "tracker",它接受以下开关:--dummy --audit_sessiones --user_count --detailed_user_count --parfile
--parfile
switcj 后面应该跟一个文件名。
我有这个自动完成脚本:
_tracker()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--dummy --audit_sessiones --user_count --detailed_user_count --parfile"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
opts="ls *"
if [[ ${prev} == --parfile ]]; then
COMPREPLY=( "${files[@]##*/}" )
return 0
fi
}
complete -F _tracker tracker
开关的自动完成工作正常。
但我也希望用户能够在参数 --parfile
之后立即使用文件名自动完成功能,但我无法使其工作。
尝试用 COMPREPLY=( $(compgen -f ${cur}) )
COMPREPLY=( "${files[@]##*/}" )
可以在以下链接中找到有关自动完成的更多信息
complete
有一个 -o default
选项,因此您可以删除 opts="ls *"; if ... fi
部分并只执行 complete -F _tracker -o default tracker
.
根据 bash 手册:
If the
-o default
option was supplied tocomplete
when the compspec was defined, readline's default completion will be performed if the compspec (and, if attempted, the default bash completions) generate no matches.