在 OS X 上 Bash 意外完成 ~

在 OS X 上 Bash 意外完成 ~

我按下~TabTabbash 命令提示符并得到了一组意想不到的完成结果。

首先,它看起来像目录中的所有人员/Users,甚至更多。

然后我认为它正在对具有“主”目录的人进行反向查找/etc/password,或者可能是那些/var/empty- 这似乎是正确的。

我好奇的是真的正在进行和为什么这就像它一样工作。

答案1

我没有方便检查的 OSX 系统,但在所有 *nixes 上,~foo是 user 主目录的简写foo。例如,此命令将移动到我的用户的$HOMEcd ~单独移动到您的主目录):

cd ~terdon

因此,~Tab将扩展到所有可能的用户名。该列表应与 中的用户列表相同/etc/passwd

我可以确认,当我在 Debian 上尝试时,确实会发生这种情况。

答案2

我认为它正在对 /etc/password 中具有“home”目录的人员进行反向查找。

在 OS X 上,会查询开放目录而不是 /etc/passwd。

答案3

Bash 参考手册:

Bash 尝试将文本视为用户名完成(如果文本以“~”开头)

重击用途 getpwent函数来完成。

man getpwent在 OSX 上说:

这些函数从 opendirectoryd(8) 获取信息,包括 master.passwd(5) 中描述的 /etc/master.passwd 中的记录。

相关内容