请问 linux complete 补全命令如何实现补全某一个指定的目录列表?

我按照网上的教程在 .bashrc 文件里面定义了一个快捷命令 cw,内容如下:

#函数 cw 是两个小写字母
function cw() {
    cd /yhmweb
    if [ ! -z $1 ] && [ -d ./$1 ]; then
        cd $1
    fi
    ll
}
function _completeCW() {
    ls /yhmweb
}
complete -F _completeCW func

目前输入 cw 能切换到 /yhmweb 目录,但是在任意目录内补全的都是当前目录下的文件列表,我希望的结果是 无论在任何目录的位置,输入 cw 后,然后按 tab 键就补全 /yhmweb 这个目录的目录(排除文件)列表,方便我快速切换到这个目录下的某个子目录内,恳求大神指正,小弟感激不尽。

阅读 2.1k
1 个回答

function _completeCW() {
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -d -- /yhmweb/$cur | sed 's|^/yhmweb/||' | awk '{print $0"/"}') )
}

complete -F _completeCW cw

补全后会添加一个空格,这是 bash 的默认行为。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题