首先,我知道 ~/
是主目录。 CDing 到 ~
或 ~/
会将我带到主目录。
但是,cd ~X
将我带到了一个特殊的地方,X
似乎是任何东西。
在 bash 中,如果我点击 "cd ~
"并点击 tab,它会显示一堆可能的 ~X
选项,例如 ~mail
和 ~postgres
和 ~ssh
。转到这些文件夹并执行 pwd
显示这些文件夹不在主目录中;他们到处都是。
它们不是别名。我已经检查过了。
它们不是 env.
变量,否则它们需要 $
。
什么是设置这些链接,我在哪里可以找到这些设置的位置?
最佳答案
这是一个名为“tilde expansion”的 Bash 功能。这是外壳的功能,而不是操作系统。例如,使用 csh 你会得到不同的行为。
回答您关于信息来自哪里的问题:您的主目录来自变量 $HOME
(无论您在那里存储什么),而其他用户的主目录使用 getpwent()
实时检索.该功能通常由 NSS 控制;因此默认情况下,值是从 /etc/passwd
中提取的,尽管可以将其配置为使用所需的任何源检索信息,例如 NIS、LDAP 或 SQL 数据库。
波浪号扩展不仅仅是主目录查找。总结如下:
~ $HOME
~fred (freds home dir)
~+ $PWD (your current working directory)
~- $OLDPWD (your previous directory)
~1 `dirs +1`
~2 `dirs +2`
~-1 `dirs -1`
dirs
和~1
、~-1
等,配合pushd
和popd
.
编辑添加:
正如 Sean Bright 在评论中指出的那样,关于主目录的基线波浪号行为被编码为 POSIX-compliant shell 的标准行为。此外,指定 wordexp() C API 函数来实现此行为。不过,显然,请谨慎使用。
https://stackoverflow.com/questions/998626/