Bash 如何自动完成特定目录下的文件?

Bash 如何自动完成特定目录下的文件?,bash,bash-completion,Bash,Bash Completion,我创建了一个命令memo,如下所示: memo(){ vi$HOME/memo/$1 } 我想对我的memo应用bash完成,以打开已在$HOME/memo目录中的文件: $memo[TAB]#在$HOME/memo中显示文件 $HOME/memo包含目录,因此在memo下列出文件是不够的。 换句话说,我想将$HOME/memo中的ls命令中使用的内容应用到memo: $ls[选项卡] foo.md酒吧/ 我尝试了以下方法,但对嵌套目录无效: \u备忘录(){ 本地电流 本地文件 _通过\

我创建了一个命令
memo
,如下所示:

memo(){
vi$HOME/memo/$1
}
我想对我的
memo
应用bash完成,以打开已在
$HOME/memo
目录中的文件:

$memo[TAB]#在$HOME/memo中显示文件
$HOME/memo
包含目录,因此在
memo
下列出文件是不够的。 换句话说,我想将
$HOME/memo
中的
ls
命令中使用的内容应用到
memo

$ls[选项卡]
foo.md酒吧/
我尝试了以下方法,但对嵌套目录无效:

\u备忘录(){
本地电流
本地文件
_通过\u ref-n:cur获取\u comp\u words\u
文件=$(ls$MEMODIR)
COMPREPLY=($(compgen-W“${files}”--“${cur}”))
}
完成-F_备忘录

MEMODIR=$HOME/memo

以下是一个简单的示例:

\u备忘录()
{
本地备忘录目录=$HOME/MEMO
本地cmd=$1 cur=$2 pre=$3
本地arri文件
arr=($(cd“$MEMO_DIR”和&compgen-f--“$cur”))
压缩=()
对于((i=0;i<${arr[@]};++i)),do
file=${arr[i]}
如果[-d$MEMO_DIR/$file]];则
file=$file/
fi
COMPREPLY[i]=$file
完成
}
完成-F_备忘录-o nospace备忘录


@oguzismail更新