加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 自定义目录完成附加空格

发布时间:2020-12-15 22:50:02 所属栏目:安全 来源:网络整理
导读:我有以下目录结构: /home/tichy/xxx/yyy/aaa/home/tichy/xxx/yyy/aab/home/tichy/xxx/yyy/aac 我想输入cdw y TAB并得到cdw yyy / CURSOR因此,我可以添加cdw yyy / a TAB并得到cdw yyy / aa CURSOR 我想出的解决方案给了我以下内容: cdw y TAB = cdw yyy SP
我有以下目录结构:

/home/tichy/xxx/yyy/aaa
/home/tichy/xxx/yyy/aab
/home/tichy/xxx/yyy/aac

我想输入cdw y< TAB>并得到cdw yyy /< CURSOR>因此,我可以添加cdw yyy / a< TAB>并得到cdw yyy / aa< CURSOR>

我想出的解决方案给了我以下内容:
cdw y< TAB> => cdw yyy< SPACE>< CURSOR>

以下代码我到目前为止:

_cdw () {
    local cur prev dirs
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    COMPREPLY=($(compgen -d -- /home/tichy/xxx/${cur}|perl -pe 's{^/home/tichy/xxx/}{}'))
    # no difference,a bit more logical:
    dirs=$(compgen -o nospace -d /home/tichy/xxx/${cur}|perl -pe 's/{^/home/tichy/xxx/}{}')
    COMPREPLY=($(compgen -d -W ${dir} ${cur}|perl -pe 's{^/home/tichy/xxx/}{}'))
    return 0
}
complete -F _cdw cdw
cdw () {
    cd /home/tichy/xxx/$@
}

有什么想法有什么不对吗?在我看来,完成过程似乎已经完成,并没有期待任何更多的输入.

解决方法

这样的事情怎么样:

COMPREPLY=( $(cdw; compgen -W "$(for d in ${cur}* ${cur}*/*; do [[ -d "$d" ]] && echo $d/; done)" -- ${cur}) )

(我不确定你是否可以从这里调用你的shell函数,否则你可能需要复制一下.)

这也摆脱了你的perl hack

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读