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 () { 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |