当我创建一个用一些糖包装现有命令的命令时,我希望新命令支持原始命令的自动完成。有没有办法告诉 Bash 重用另一个命令的自动完成脚本?
愚蠢的例子:
cat > ~/ls-on-steroids.sh <<EOF
echo "Here are some goodies!"
ls "$@"
EOF
chmod +x ~/ls-on-steroids.sh
现在,如何配置我的新脚本,以便当我键入时:
~/ls-on-steroids.sh <TAB><TAB>
我想要与以下行为相同的行为:
ls <TAB><TAB>
最好以可移植、可重复的方式,而无需手动追踪
ls
的自动完成脚本的位置。
您必须手动配置它,但从现有命令复制补全相对简单。首先,运行
complete -p ls
查看为 ls
定义的命令(如果有)。如果没有出现任何结果,ls
不会使用任何特殊的补全。不过,您可能期望看到类似以下内容的输出
complete -o default -F _longopt ls
表示调用函数
_longopt
来生成命令 ls
的补全,如果未生成任何结果,则使用 bash
默认补全。您只需运行即可将相同的功能应用于
ls_on_steroids
complete -o default -F _longopt ls_on_steroids
(即将
ls
替换为 ls_on_steroids
作为 complete -p
打印的命令中的最后一个参数)。