Linux【3】-3-1-Bash命令行中提供了5种标准补全方式

在Linux中,默认情况下,Bash为用户提供以下标准补全功能,以供用户在命令行中使用:

  1. 变量名补全
  2. 用户名补全
  3. 可执行补全
  4. 文件名和目录补全
  5. 主机名补全

一、变量名补全 Variablename Completion

在终端中键入$后,按两次tab键将显示所有可用的shell变量,如下所示。

$ echo $[TAB][TAB]
$_                            $COMP_POINT                   $HOSTTYPE                     $PS1
$_backup_glob                 $COMPREPLY                    $IFS                          $PS2
$BASH                         $COMP_TYPE                    $inx                          $PS4
$BASH_ALIASES                 $COMP_WORDBREAKS              $LANG                         $PWD
$BASH_ARGC                    $COMP_WORDS                   $LANGUAGE                     $RANDOM
$BASH_ARGV                    $cur                          $LESSCLOSE                    $redir
$BASH_CMDS                    $cword                        $LESSOPEN                     $SECONDS
$BASH_COMMAND                 $DIRSTACK                     $LINENO                       $SHELL
$BASH_COMPLETION_COMPAT_DIR   $DISPLAY                      $LINES                        $SHELLOPTS
$BASH_LINENO                  $errx                         $LOGNAME                      $SHLVL
$BASHOPTS                     $EUID                         $LS_COLORS                    $split
$BASHPID                      $exclude                      $MACHTYPE                     $SUDO_COMMAND
$BASH_REMATCH                 $flag                         $MAIL                         $SUDO_GID
$BASH_SOURCE                  $FUNCNAME                     $MAILCHECK                    $SUDO_UID
$BASH_SUBSHELL                $GROUPS                       $OLDPWD                       $SUDO_USER
$BASH_VERSINFO                $__grub_script_check_program  $OPTERR                       $suffix
$BASH_VERSION                 $HISTCMD                      $OPTIND                       $TERM
$__colormgr_commandlist       $HISTCONTROL                  $OSTYPE                       $UID
$COLORTERM                    $HISTFILE                     $outx                         $USER
$COLUMNS                      $HISTFILESIZE                 $PATH                         $USERNAME
$COMP_CWORD                   $HISTSIZE                     $PIPESTATUS                   $words
$COMP_KEY                     $HOME                         $PPID                         $XAUTHORITY
$COMP_LINE                    $HOSTNAME                     $prev 

二、用户名补全

当您按两次Tab键时,在波浪号(〜)之后,bash将自动启动用户名补全。

$ cd ~[TAB][TAB]
~bala/      ~raj/
~jason/     ~randy/
~john/      ~ritu/
~mayla/     ~thomas/
~nisha/     ~www-data

请注意,这不会从主目录中提取用户名。 而是显示 /etc/passwd 文件中所有可用的用户名

三、可执行文件的路径名补全

当您尝试执行命令时,如果可执行文件具有执行权限,则在找到单个匹配项时,它将自动完成,如下例所示。

$ ls -l /etc/init.d/reboot
-rwxr-xr-x 1 root root 639 Jan 30  2013 /etc/init.d/reboot

$ /etc/init.d/reb[TAB][TAB]

$ /etc/init.d/reboot

当找到多个匹配项时,它将显示可用命令。

四、文件名和目录补全

此完成是针对命令行中第二个及后续位置上出现的文件名和目录名称的。 与上述示例不同,该命令不检查任何权限,只会显示所有可用的文件和目录。

$ ls
countfiles.sh  dir1  dir2  dir3 

$ cat [TAB][TAB]
countfiles.sh  dir1  dir2  dir3  

$ cat c[TAB][TAB]

$ cat countfiles.sh

另外,当有很多文件要显示时,它会显示以下警告消息,而不是在屏幕上显示所有可能会引起混乱的可能性。

五、主机名补全

为了获取要连接的主机名,请在@符号后按两次tab,如下所示:

$ ssh john@[TAB][TAB]
@dev-db  @fileserver @qa-server
@prod-db @localhost  @web-server

您可以将此主机名补全功能与任何可以在主机名中使用@的命令一起使用。 例如,也可以将其与scp一起使用,如下所示:

$ scp filename.txt john@[TAB][TAB]
@dev-db  @fileserver @qa-server
@prod-db @localhost  @web-server

请注意,这会从 /etc/hosts 文件中选择可用的主机名。

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn