问题描述
我正在创建一个新命令,我需要一个完成功能,以便当我几次按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中使用哪种引号,如何使用引号以及何时使用引号。