Bash:按 4 次退出

flo*_*w2k 12 bash

当我在 bash 终端中按 Esc 4 次时,它显示如下内容:

-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen
Run Code Online (Sandbox Code Playgroud)

这是什么功能,如何找到这些条目?(第二次按下 esc 时,终端会发出声音警报。)

Kus*_*nda 12

$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete
Run Code Online (Sandbox Code Playgroud)

这说明Emacs 命令行编辑模式下Meta+Esc(and Ctrl+i)的默认键绑定是 Readline 函数complete。该Meta键通常Esc位于没有显式Meta键的键盘上。这个函数的 Readline 文档说

尝试对 point 之前的文本进行补全。实际执行的完成是特定于应用程序的。例如,Bash 尝试将文本作为变量(如果文本以 开头$)、用户名(如果文本以 开头 ~)、主机名(如果文本以 开头@)或命令(包​​括别名和函数)依次完成。如果这些都不匹配,则尝试文件名补全。另一方面,Gdb 允许完成程序函数和变量,并且仅在某些情况下尝试完成文件名。


关于您对Anthon 的回答的评论:不,按Esc两次与Tab一般按不同(除非它在将它们都映射到相同操作的程序中,如 Readline 默认情况下所做的那样)。不过Ctrl+i 一样Tab,就像Ctrl+[是一样Esc。这意味着如果你愿意,你可以用Ctrl+[ Ctrl+[in完成bash,只要 doubleEsc绑定到 Readlinecomplete函数。例如,如果您在没有 Escape 键的 VT220 终端上工作,这会很方便:

德国VT220键盘

  • @flow2k 如果 Esc-Esc 和 Tab 都绑定到 `complete` 函数,则默认情况下它们是相同的,但通常不是(即按键不“相同”)。您不能在任何地方用 Esc-Esc 替换 Tab,只能在具有 readline 功能的程序中。但是,您可以在任何地方用 Ctrl-i 代替 Tab 或用 Ctrl-[ 代替 Esc。 (2认同)

Ant*_*hon 8

这称为文件补全,如果您在命令行上没有任何前面的命令,bash 将提供您补全它知道的所有 2837 个命令,包括内置命令和在您的命令行中找到的命令。 PATH

以排序的顺序显示