的完成功能来完成自定义

的完成功能来完成自定义

本文介绍了如何重用 rostopic 的完成功能来完成自定义 bash 功能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

定义的bash函数rte():

$ function rte(){ rostopic echo $@ ; };

并尝试使用rostopic的补全功能

$ complete -p rostopic
complete -F _roscomplete_rostopic rostopic

通过命令:

$ complete -F _roscomplete_rostopic rte

以上设置可以验证如下:

The above setting can be verified as follows:

$ complete -p rte
complete -F _roscomplete_rostopic rte

但是,rte 不提供补全.

问题:如何让 rte() 使用 rostopic 的补全?我猜当 rte() 的完成调用 rostopic 的完成时,上下文 echo 需要提供给 rostopic 的补全(即 COMP_WORDS 需要包含 echo).

Question: How to get rte() to use rostopic's completion? I guess when rte()'s completion calls rostopic's completion, the context echo needs to be provided to rostopic's completion (i.e., COMP_WORDS needs to contain echo).

推荐答案

想出了一个解决方案 -- 现在在 .bashrc 中有以下内容:

Figured out a solution -- now have the following in .bashrc:

function rte(){ rostopic echo "$@" ; };

complete -F _mycomplete_ rte

function _mycomplete_()
{
    local fragment=${COMP_WORDS[COMP_CWORD]}
    COMP_CWORD=2
    COMP_WORDS[0]="rostopic"
    COMP_WORDS[1]="echo"
    COMP_WORDS[2]=$fragment
    COMP_LINE="rostopic echo $fragment"

    _roscomplete_rostopic;
}

这篇关于如何重用 rostopic 的完成功能来完成自定义 bash 功能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-25 18:15