gpt4 book ai didi

bash-completion - bash_completion 的不同目录(自动完成指定目录下的子文件夹)

转载 作者:行者123 更新时间:2023-12-04 00:38:02 26 4
gpt4 key购买 nike

为了能够在我的系统上的任何地方输入 dev my-[tab] 并像

一样接收自动完成
$ dev my-[tab]
my-project
my-awesome-project

我在 /etc/bash_completion.d/ 中创建了一个文件,内容如下:

_dev()
{
PROJECTS=$(ls /development)
local cur=${COMP_WORDS[COMP_CWORD]}

COMPREPLY=( $(compgen -W "${PROJECTS}" -- $cur) )
}

complete -F _dev dev

这很好用,但我也希望能够自动完成子文件夹:

[~] $ dev my-p[tab]
[~] $ dev my-project/[tab][tab]
src doc
[~] $ dev my-project/s[tab][enter]
[/development/my-project/src] $

所以基本上,我希望 dev 自动完成,就像 cd 一样。

dev 只是一个别名:

alias dev='gotodev'
gotodev ()
{
cd /development/$1
}

最佳答案

刚刚写了一个例子:

[/tmp] # cat compspec
g_proj_dir=/tmp/projects

dev()
{
cd $g_proj_dir/$1
}

_dev()
{
local cmd=$1 cur=$2 pre=$3
local _cur compreply

_cur=$g_proj_dir/$cur
compreply=( $( compgen -d "$_cur" ) )
COMPREPLY=( ${compreply[@]#$g_proj_dir/} )
if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
COMPREPLY[0]=${COMPREPLY[0]}/
fi
}

complete -F _dev -o nospace dev
[/tmp] # source ./compspec
[/tmp] #
[/tmp] # cd /tmp/
[/tmp] # mkdir -p projects/{bar,foo}{1,2}/mod{1,2}/submod{1,2}
[/tmp] # touch projects/{bar,foo}{1,2}/mod{1,2}/submod{1,2}/file{1,2}
[/tmp] # dev <TAB><TAB>
bar1 bar2 foo1 foo2
[/tmp] # dev f<TAB>
[/tmp] # dev foo
[/tmp] # dev foo<TAB><TAB>
foo1 foo2
[/tmp] # dev foo2<TAB>
[/tmp] # dev foo2/
[/tmp] # dev foo2/<TAB>
[/tmp] # dev foo2/mod
[/tmp] # dev foo2/mod<TAB><TAB>
foo2/mod1 foo2/mod2
[/tmp] # dev foo2/mod2<TAB>
[/tmp] # dev foo2/mod2/
... ...

关于bash-completion - bash_completion 的不同目录(自动完成指定目录下的子文件夹),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38737675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com