首先,我知道这~/是主目录。CD ~或~/带我到主目录。
但是,cd ~X带我到一个特别的地方,那里X似乎什么都没有。
在bash中,如果我按“ cd ~”并按Tab,它将显示许多可能的~X选项,例如~mail和~postgres和~ssh。转到这些文件夹并执行一个操作,pwd向我显示这些文件夹不在主目录中。他们到处都是。
它们不是别名。我查过 它们不是env.变量,否则需要$。
设置这些链接的方式是什么?在哪里可以找到设置这些链接的位置?
首先,我知道这~/是主目录。CD ~或~/带我到主目录。
但是,cd ~X带我到一个特别的地方,那里X似乎什么都没有。
在bash中,如果我按“ cd ~”并按Tab,它将显示许多可能的~X选项,例如~mail和~postgres和~ssh。转到这些文件夹并执行一个操作,pwd向我显示这些文件夹不在主目录中。他们到处都是。
它们不是别名。我查过 它们不是env.变量,否则需要$。
设置这些链接的方式是什么?在哪里可以找到设置这些链接的位置?
Answers:
这是一个称为“ 波浪号扩展 ” 的Bash功能。这是外壳程序的功能,而不是操作系统的功能。例如,您将通过csh获得不同的行为。
要回答有关信息从何而来的问题:您的主目录来自变量$HOME(无论您存储在什么地方),而其他用户的主目录则使用实时检索getpwent()。此功能通常由NSS控制;因此,默认情况下/etc/passwd会从中拉出值,尽管可以将其配置为使用所需的任何来源(例如NIS,LDAP或SQL数据库)来检索信息。
Tilde扩展不仅仅是主目录查找。总结如下:
~ $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。
~+?似乎没有用。
这些是用户的主目录。cd ~(your username)例如,尝试。
这些是用户。检查您的/etc/passwd。
cd ~username 将您带到该用户的主目录。
在我的机器上,由于我进行设置的方式,因此请执行以下操作:
cd ~ # /work1/jleffler
cd ~jleffler # /u/jleffler
首先关注环境变量的价值$HOME; 我故意将其设置$HOME为本地文件系统,而不是NFS安装的文件系统。第二个从密码文件中读取(大约; NIS使事情有些复杂),并发现密码文件说我的主目录是/u/jleffler该目录,然后更改为该目录。
令人讨厌的是,大多数软件的行为均与上述行为相同(并且Shell的POSIX规范要求此行为)。我使用了一些软件(并且我没有太多选择),将密码文件中的信息视为$ HOME的当前值,这是错误的。
将其应用于问题-正如其他人所指出的那样,“ cd ~x”将进入用户“ x”的主目录,并且更普遍的是,每当进行代字扩展时,都~x意味着用户“ x”的主目录(这是错误的如果用户“ x”不存在)。
可能值得一提的是:
cd ~- # Change to previous directory ($OLDPWD)
cd ~+ # Change to current directory ($PWD)
我无法立即找到' ~+' 的用途,除非您在通向当前目录的路径中移动符号链接来做一些奇怪的事情。
您也可以这样做:
cd -
这与的含义相同~-。
cd ~+:您可能会用它来检查您当前所在的目录是否仍然存在-即使这是一种非常不合常规的方式。
Bash中的Tilde扩展:
http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde