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

时间:2015-01-28 13:28:17

标签: bash autocomplete

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

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

$ foo
autocompleting...

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

$ foo
bar        baz        jazz

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

$ foo j
autocompleting...

应该改为

$ foo jazz

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

下一步是考虑在自动完成运行时是否可以使用动态输出,例如,在单个位置打印字符\ | / -,就像一条线在旋转一样到位 - 以视觉方式表明事情正在发生。这有可能吗?

1 个答案:

答案 0 :(得分:1)

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

您的问题略有不同,因为您要删除微调器然后输出结果。因此,您可以考虑反转背景化的过程。换句话说,你的微调器背景,然后当你的自动完成功能完成时它可以被显式杀死(但在输出结果之前,如果你的代码可能的话)。