2016-08-13 33 views
0

当我用一些糖创建一个包装现有命令的命令时,我希望新命令支持原始命令的自动完成。有没有办法告诉Bash重用另一个命令的自动完成脚本?使用另一个命令的Bash自动完成

傻例如:

cat > ~/ls-on-steroids.sh <<EOF 
echo "Here are some goodies!" 
ls "[email protected]" 
EOF 
chmod +x ~/ls-on-steroids.sh 

现在,如何配置我的新的脚本,这样当我键入:

~/ls-on-steroids.sh <TAB><TAB> 

我想相同的行为与:

ls <TAB><TAB> 

最好以便携式,可重复的方式,无需手动追踪的位置0的自动完成脚本。

回答

2

您必须手动配置它,但从现有命令复制完成相对简单。首先,运行complete -p ls以查看ls定义了什么命令(如果有的话)。如果什么都没有出现,ls不使用任何特殊的完成。你可能期待看到类似以下的输出,虽然

complete -o default -F _longopt ls 

它说,该函数_ls被调用来生成竣工的命令ls,如果不产生任何结果,请使用bash默认完成。你可以通过简单运行

complete -o default -F _longopt ls_on_steroids 

应用相同的函数来ls_on_steroids(即,具有替换ls_on_steroidsls如在由complete -p打印的命令的最后一个参数)。

+0

听起来像它可以自动化。任何警告虽然?这个命令可以在不同的系统上看起来不同吗有没有更直接的方法来获取提供自动填充的命令的名称? –

+0

看起来'complete'需要多个命令,所以我可以运行:'complete -p ls | sed's/$/ls-on-steroids /'将脚本包含在'ls'的自动完成中。 –

+0

我的意思是:'$(complete -p ls | sed's/$'ls-on-steroids /')' –