如何使用一个命令的输出作为另一个命令的bash完成

问题描述

我正在创建一个新命令,我需要一个完成功能,以便当我几次按Tab键时,它为我提供了一些选择。替代列表应该是git存储库中可用的分支。

我使用过complete -W $(git branch | grep -v '^*' | xagrs) my_command,但是一旦.bashrc被“编译”了,它就创建了一个静态列表,并且每个存储库都不动态。

我也发现了complete -c,但这似乎不起作用。

有什么想法吗?

解决方法

complete具有-F参数,可让您从任何函数内部生成complete。在该函数内部,运行命令git branch | grep -v '^*',并正确填写COMPREPLY。有很多关于如何在网上编写bash完成函数的指南-研究它们并根据需要编写自己的函数。

注意:-W $(...)-不带引号的扩展会进行单词拆分,因此您可以有效地运行带有单个完成参数的complete。请务必研究在shell中使用哪种引号,如何使用引号以及何时使用引号。