2.5 用户名、主机名及变量名补全
除了常见的文件名、命令名补全外,Shell 自动补全还支持其它补全类型。这充分展现了 Shell 自动补全多才多艺的一面。下面我们就来看一看 Shell 如何自动补全用户名。
当我输入
之后按 Tab,此时 bash 为我呈现了系统中存在的用户名列表。如图 2.7 所示。
我继续输入 x
并再次按 Tab,于是 bash 补全了 xiaodong
这个用户名。
在 zsh 中,我们可以看到,与 bash 相比,提供的补全用户名列表表现形式略有差异。bash 中包含 ~
前缀,并在结尾带有 /
(斜杠)。zsh 中则仅有用户名本身。如图 2.8 所示。
如果你经常使用 ssh
登录远程机器的话,那么主机名自动补全将助你一臂之力。同样,我们先来看一个例子。我在输入
后按 Tab,这时 bash 展示了可以自动补全的主机名列表。
xiaodong@codeland:~$ ssh xiaodong@l
xiaodong@lab.github.com xiaodong@localhost
xiaodong@linuxtoy.org xiaodong@localhost.localdomain
xiaodong@codeland:~$ ssh xiaodong@l
我接着输入 i
并按 Tab,这次 bash 就自动补全了完整的主机名 linuxtoy.org
。你也可以直接在 @
后按 Tab,这样的话就会显示全部主机名了。
不仅是主机名,而且 IP 地址也同样支持自动补全。另一种情况是,直接在输入 ssh l
后按 Tab,bash 也能对主机名进行自动补全。
看到这里,你或许会想,bash 从哪里找到这些可以用来自动补全的主机名呢?一个是 /etc/hosts
文件的内容,另一个是 ssh
的配置文件,比如 ~/.ssh/config
。如图 2.9 所示。所以,如果你打算让 bash 为你自动补全常用的主机名的话,那么不妨考虑将其添加到这两个文件中。此外,还包括 ~/.ssh/known_hosts
文件。凡是通过 ssh
登录过的主机,便会包含其中。
zsh 对主机名的自动补全与 bash 类似,此不赘述。
最后,让我们来看看对变量名的自动补全情况。当我输入
后按 Tab 并根据提示按 y,这时 bash 显示了全部可供补全的变量名。如图 2.10 所示。
然后,我继续输入并搭配 Tab 按键,从而补全了变量 BASH_VERSION
。
zsh 对变量的自动补全与 bash 相似,不过,在我的系统上比 bash 提供的补全列表更多一些。如图 2.11 所示。
综合来看,这几种补全类型跟前面我们所讲的文件名、命令名自动补全还是有一点差异,那就是它们带着一个特殊的前缀字符,参考表 2.1。
前缀字符 | 自动补全类型 |
---|---|
~ | 用户名 |
@ | 主机名 |
$ | 变量名 |