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

时间:2016-08-13 20:29:03

标签: bash shell autocomplete

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

1 个答案:

答案 0 :(得分:2)

您必须手动配置它,但从现有命令复制完成相对比较简单。首先,运行complete -p ls以查看为ls定义的命令(如果有)。如果没有出现,ls不会使用任何特殊的完成。您可能希望看到类似以下内容的输出,但

complete -o default -F _longopt ls

表示调用函数_ls以生成命令ls的完成,如果不生成任何结果,请使用bash默认完成。您只需运行

即可将相同的功能应用于ls_on_steroids
complete -o default -F _longopt ls_on_steroids

(即,将ls替换为ls_on_steroids作为complete -p打印的命令中的最后一个参数。