假设我有一个名为 的 bash 脚本,myscript
它echo
的第一个参数是目录名。
使用示例:例如,目录位于
myscript proj1
哪里,当前工作目录是。 我的问题是,对于这个脚本,我如何编写完成规则,以便列出从 开始的所有可用的目录。这意味着在第一个例子中,假设这些是 处的唯一目录,将表达式完成为。 有人能帮我实现这个吗? proj1
~/folder1/folder2/proj1
~/
myscript [tab][tab]
echo
~/
~/
myscript pro[tab]
myscript proj1
提前致谢。
答案1
你的描述似乎很奇怪:如果你得到的只是proj1
,你怎么知道它的父目录是什么?
无论如何,为了满足您的要求:
# for me, this takes a looooooong time [1]. Do it once and cache it
mapfile -t _all_dir_names < <( find ~ -type d -printf "%f\n" )
# the function you want completion for
myfunc () { echo hello world $*; }
# the completion function
complete_myfunc() {
local dir cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=()
for dir in "${_all_dir_names[@]}"; do
if [[ $dir == "$cur"* ]]; then
printf -v dir "%q" "$dir" # protect whitespace in the dir name
COMPREPLY+=("$dir")
fi
done
}
# registering the completion
complete -F complete_myfunc myfunc
[1]:2 分钟,66782 个目录