首先,我知道这~/
是主目录。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