首先,我知道 ~/
是主目录。 CDing 到 ~
或 ~/
将我带到主目录。
然而, cd ~X
把我带到了一个特殊的地方,在那里 X
似乎是什么。
In bash, if I hit “ cd ~
” and hit tab, it shows a bunch of possible ~X
options like ~mail
and ~postgres
and ~ssh
。转到这些文件夹并执行 pwd
显示这些文件夹不在主目录中;他们到处都是。
它们不是别名。我已经检查过了。它们不是 env.
变量,否则它们需要 $
。
是什么设置了这些链接,我在哪里可以找到这些链接的设置位置?
原文由 jbu 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是一个称为“ 波浪号扩展”的 Bash 功能。这是外壳的功能,而不是操作系统。例如,您将使用 csh 获得不同的行为。
要回答有关信息来自何处的问题:您的主目录来自变量
$HOME
(无论您在那里存储什么),而其他用户的家是使用getpwent()
实时检索的-----
。该功能通常由 NSS 控制;因此默认情况下会从/etc/passwd
中提取值,尽管可以将其配置为使用所需的任何来源(例如 NIS、LDAP 或 SQL 数据库)检索信息。波浪号扩展不仅仅是主目录查找。这是一个摘要:
dirs
and~1
,~-1
, etc., are used in conjunction withpushd
andpopd
.编辑添加:
正如 Sean Bright 在评论中指出的那样,关于主目录的基线波浪号行为被编入 符合 POSIX 标准的 shell 的标准行为。此外,还指定了 wordexp() C API 函数来实现此行为。虽然,显然,谨慎使用。