【发布时间】:2018-06-24 19:28:36
【问题描述】:
在尝试配置可编程完成时,我遇到了一个我不理解的行为。
鉴于这三个完成场景,我是这样理解它们的:
$<TAB><TAB>
行首 --> 使用complete -E --> 如果不存在,使用complete -D --> 如果不存在,使用默认Bash补全 --> 没有单词就行了 --> 使用命令完成。
$com<TAB><TAB>
尝试完成第一个单词 --> 使用命令完成。
$command argu<TAB><TAB>
行中至少有一个单词 --> 试图完成一个参数 --> 使用complete 作为给定的命令 --> 如果它不存在,使用@ 987654328@ --> 如果不存在,使用默认的 Bash 补全 --> 行中已经至少有一个单词所以不要使用命令补全 --> 不以$ 开头,@ 987654330@ 或 @ 所以执行文件名完成。
我的问题是为什么在这种情况下执行文件名完成而不是命令完成,即使行上还没有单词:
$<SPACE><TAB><TAB>
因为下面的命令完成是按预期执行的,所以更令人困惑:
$<SPACE>com<TAB><TAB>
我很可能误解了手册,如果能得到任何解释,我将不胜感激。
注意:
$ 表示提示,而不是文字美元符号。
【问题讨论】:
-
是
$文字(您手动输入的命令的一部分),还是仅使用它来表示命令行提示符?对我来说(使用bash-completion),文字$<tab><tab>显示了我可以完成的变量列表。$<space><tab><tab>假定$是一个没有任何已知参数的命令,因此默认以文件名完成。 -
@AdamKatz 在那里表示提示。我明白为什么这可能会产生误导,并将相应地编辑问题。谢谢。
-
输入
complete -p会得到什么
标签: bash tab-completion bash-completion