使用另一个命令的 Bash 自动完成

问题描述 投票:0回答:1

当我创建一个用一些糖包装现有命令的命令时,我希望新命令支持原始命令的自动完成。有没有办法告诉 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
的自动完成脚本的位置。

bash shell autocomplete
1个回答
3
投票

您必须手动配置它,但从现有命令复制补全相对简单。首先,运行

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
打印的命令中的最后一个参数)。

© www.soinside.com 2019 - 2024. All rights reserved.