在尝试配置可编程完成时,我遇到了一个我不了解的行为。
鉴于这三种完成方案,这是我对它们的理解方式:
$<TAB><TAB>
该行的开头->使用complete -E
->如果不存在,请使用complete -D
->如果它不存在,请使用默认的Bash补全->行上没有单词->使用命令完成。
$com<TAB><TAB>
尝试完成第一个单词->使用命令完成。
$command argu<TAB><TAB>
行上至少有一个单词->试图完成一个参数->给定的 command 使用complete
->如果不存在,使用complete -D
->如果不存在,请使用默认的Bash补全->行上至少已经有一个单词,因此请不要使用命令补全->不能以{开头{1}},$
或~
,请执行文件名补全。
我的问题是即使在此行上还没有单词的情况下,为什么在这种情况下仍执行文件名完成而不是命令完成:
@
更令人困惑的是,以下命令的完成是按预期执行的:
$<SPACE><TAB><TAB>
我很可能会误解本手册,对于任何解释我将不胜感激。
注意:
$<SPACE>com<TAB><TAB>
表示提示,而不是字面的美元符号。
答案 0 :(得分:2)
当Bash Shell中的一行以空白开头时,这告诉Shell该命令不应进入命令历史记录。可以通过在HISTCONTROL
,.bashrc
或您想要的任何文件中设置.profile
env变量进行配置,这应该是默认行为(另请参见How to prevent commands to show up in bash history?)。>
因此,当该行的前导空格为空白时,命令执行是相同的,只是该命令不会进入历史记录。因此,代码完成的行为也相同。