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