"执行文件名补全?-6ren"> "执行文件名补全?-在尝试配置可编程完成时,我遇到了一个我不明白的行为。 鉴于这三个完成场景,这是我理解它们的方式: $ 行首 --> 使用complete -E --> 如果不存在,使用complete -D --> -6ren">
gpt4 book ai didi

bash - 为什么 "$"执行文件名补全?

转载 作者:行者123 更新时间:2023-11-29 09:00:56 24 4
gpt4 key购买 nike

在尝试配置可编程完成时,我遇到了一个我不明白的行为。

鉴于这三个完成场景,这是我理解它们的方式:


$<TAB><TAB>

行首 --> 使用complete -E --> 如果不存在,使用complete -D --> 如果不存在存在,使用默认的 Bash 补全 --> 行中没有单词 --> 使用命令补全。


$com<TAB><TAB>

尝试完成第一个单词 --> 使用命令完成。


$command argu<TAB><TAB>

一行中至少有一个词 --> 试图完成一个参数 --> 对给定的 command 使用 complete --> 如果没有'不存在,使用 complete -D --> 如果不存在,使用默认的 Bash 补全 --> 行中已经至少有一个单词所以不要使用命令补全 - -> 不以 $~@ 开头,因此执行文件名补全。


我的问题是为什么在这种情况下执行文件名完成而不是命令完成,即使行上还没有单词:

$<SPACE><TAB><TAB>

这更加令人困惑,因为下面的命令完成是按预期执行的:

$<SPACE>com<TAB><TAB>

我很可能误解了手册,如有任何解释,我将不胜感激。


注意: $ 表示提示符,而不是文字美元符号。

最佳答案

当 Bash shell 中的一行以空白开头时,这告诉 shell 该命令不应进入命令历史记录。这可以通过在 .bashrc.profile 或任何你想要的文件中设置 HISTCONTROL env 变量来配置,并且应该是默认行为(另见 How to prevent commands to show up in bash history? )。

因此,当该行有一个前导空白时,命令执行是相同的,除了这个命令不进入历史。因此,代码完成的行为也相同。

关于bash - 为什么 "$<space><tab><tab>"执行文件名补全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51013283/

24 4 0