这只是一个词汇问题,但一直在我脑海中回荡。
它来自LPIC准备书中的实践考试。根据这本书的正确答案是,这~/Documents
是相对目录,因为它是相对于主目录的。
但是,这本书包含错别字和错误的比率很高,所以我不能认为那里写的一切都是理所当然的。在这里我并不同意,因为对我而言,它~
充当由Shell扩展为变量内容$HOME
或当前用户主目录路径(参见参考资料man bash
)的变量,因此实际路径/home/myuser/Documents
确实是绝对目录。
即使是Wikipedia,这一次对我似乎也无济于事(即使似乎证实这本书是错误的):
无论当前工作目录如何,绝对路径或完整路径都指向文件系统中的同一位置。为此,它必须包含根目录。
相反,相对路径从某些给定的工作目录开始,从而避免了提供完整的绝对路径。
再次重申,我不同意:根据此定义,/opt/kde3/bin/../lib
不依赖于当前工作目录的路径应该是绝对路径,但是我目前对此的理解与本书的作者相符,从而使该路径成为相对路径。
快速的Web搜索只是增加了我的无奈,根据韦氏词典:
绝对路径-相对于根目录的路径。它的第一个字符必须是路径名分隔符。
那么$HOME/Documents
,甚至$HOME
不被认为是绝对目录?还是这个定义暗含变量扩展?外壳的~
特征如何?我可以在某处找到相对目录和绝对目录的可靠定义吗?我一路走错了吗?
如果作者试图通过将文字字符串(不带外壳扩展名)作为路径来吸引您,那么它就是相对路径(mkdir -p './~/Documents'
)。否则:
这是绝对路径,因为解析它并不依赖于进程的当前工作目录。相对路径始终表示相对于流程的工作目录。或在符号链接目标的情况下,相对于符号链接的位置。(gcc -> gcc-5.2
对gcc -> /usr/bin/gcc-5.2
)。这对于NFS挂载和其他情况下很重要,在这些情况下,您可以通过不同的绝对路径到达同一符号链接。例如
/net/tesla/home/peter/foo -> bar # always works from other machines
/net/tesla/home/peter/foo -> /home/peter/bar # references my home dir on the local machine, not tesla.
Debian有时会将符号链接安装到../../doc/whatever/whatever
,而不是绝对符号链接目标,因此,当NFS挂载在其他位置或查看chroot而不使用它时,它会起作用chroot(8)
。
每个Unix进程都有自己的cwd。该pwd
命令仅用于打印它。
有关使用POSIX系统调用更改目录的更多信息,请参见:http : //pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html。
就像其他人都说过的那样,~
在路径用于任何事物之前,它会被外壳扩展。使用~/bin/myprog
在shell脚本将使得针对不同用户的工作方式不同。~/bin/foo
和之间的区别在于/home/peter/bin/foo
,其中一个已对位置进行了硬编码,而另一个已对其进行了参数化。将~
版本称为相对路径是错误的(IMO)。
谈论事物“相对于环境变量”只是令人困惑。在您使用它们的上下文中,使用具有特定技术含义的术语的不同英语含义是不好的做法。
在损坏的系统上,使用HOME=a/relative/path
,~/foo
将扩展为相对路径。这根本不是一个可用的设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句