Bash:在长时间自动完成期间显示进度指示器

Irf*_*rfy 7 bash autocomplete

我有一个bash自动完成功能,它可以查询数据库,为bash中的当前命令行提供可能的完成.完成大约需要3秒钟,在此期间用户没有任何迹象表明他已触发自动完成 - 提示他按下TAB几次,导致自动完成功能可能会再运行几次.

一旦启动自动完成,是否可以以某种方式操作命令行以显示正在执行的操作?例如,当我TAB在命令后按两次foo,我希望立即发生以下情况:

$ foo
autocompleting...
Run Code Online (Sandbox Code Playgroud)

然后在确定可能的完成后,改为:

$ foo
bar        baz        jazz
Run Code Online (Sandbox Code Playgroud)

或者,如果我输入foo j并按TAB一次,则以下内容:

$ foo j
autocompleting...
Run Code Online (Sandbox Code Playgroud)

应该改为

$ foo jazz
Run Code Online (Sandbox Code Playgroud)

没有任何额外的文字,正如预期的那样.

下一步是考虑在自动完成运行时是否可以有动态输出,例如,\ | / -在一个地方打印字符,就好像一条线在适当的位置旋转 - 以直观地指示正在发生的事情.这可能吗?

小智 1

当然,这是可能的,我想你会在这个答案中找到你需要的一切(所以这可能被认为是重复的问题): Using BASH to display a Progress (working) Indicator

您的问题略有不同,因为您需要删除微调器,然后输出结果。因此,您可能会考虑反转后台进程。换句话说,将旋转器置于后台,然后在自动完成功能完成时(但在输出结果之前,如果您的代码可能的话)可以显式终止它。