Spring Shell 可以为两个交互式 shell 提供完成建议 和命令行。然而,当 shell 在 交互模式,我们有一个 shell 的活动实例,这意味着它是 更轻松地提供更编程的方法来提供完成提示。 当 shell 纯粹作为命令行工具运行时,完成只能 通过集成到操作系统级别的 shell 中(如 bash)来完成。
互动
补全提示是用函数或接口样式计算的
方法,用于获取并返回实例列表。 给你各种
有关当前上下文的信息,例如命令注册和选项。CompletionContext
CompletionProposal
CompletionContext
如果通用解析器有用,则可以将其注册为 Bean
对于所有命令和场景。例如,现有完成
实现处理完成
对于选项名称。RegistrationOptionsCompletionResolver |
static class MyValuesCompletionResolver implements CompletionResolver {
@Override
public List<CompletionProposal> apply(CompletionContext t) {
return Arrays.asList("val1", "val2").stream()
.map(CompletionProposal::new)
.collect(Collectors.toList());
}
}
具有基于构建器的命令注册的选项值可以是 按选项定义。
void dump1() {
CommandRegistration.builder()
.withOption()
.longNames("arg1")
.completion(ctx -> {
return Arrays.asList("val1", "val2").stream()
.map(CompletionProposal::new)
.collect(Collectors.toList());
})
.and()
.build();
}
处理具有基于注释的命令注册的选项值
通过可以通过注释定义的接口。ValueProvider
@ShellOption
static class MyValuesProvider implements ValueProvider {
@Override
public List<CompletionProposal> complete(CompletionContext completionContext) {
return Arrays.asList("val1", "val2").stream()
.map(CompletionProposal::new)
.collect(Collectors.toList());
}
}
实际使用基于注释的命令需要
注册为 Bean。ValueProvider
@ShellMethod(value = "complete", key = "complete")
public String complete(
@ShellOption(valueProvider = MyValuesProvider.class) String arg1)
{
return "You said " + arg1;
}
如果通用解析器有用,则可以将其注册为 Bean
对于所有命令和场景。例如,现有完成
实现处理完成
对于选项名称。RegistrationOptionsCompletionResolver |
命令行
命令行完成目前仅支持 bash 并已记录在案
在内置命令 Completion 中。completion