.
和..
作为路径(与我不关心的范围,例如{1..10}
)的确如何运作?我知道他们做了什么,并且一直使用它们,但是没有完全掌握它们的解释方式。 shell是否处理它们?口译过程?操作系统?
我之所以要问的是,我希望能够使用...
来引用../..
,....
来引用../../..
等(达到一些小的有限数;我不需要bash来处理任意大量的点)。即,如果我当前的目录是/tmp/let/me/out
,并且我调用了cd ...
,那么我生成的当前目录应该是/tmp/let
。我并不特别关心...
等ls -a
输出如.
和..
那样,但我希望能够调用cat /tmp/let/me/out/..../phew.txt
打印/tmp/phew.txt
。
指向相关文档的指针以及直接答案。这种语法问题对Google来说非常难。
顺便说一句,我正在使用bash 4.3.42
和autocd
shell选项。
答案 0 :(得分:1)
我写这篇文章是为了澄清之前已经写过的内容。
在许多文件系统中,DIRECTORY是一个文件;文件系统直接识别为特殊类型的文件。
目录文件包含映射到磁盘上文件的名称列表
一个文件,包括一个直接没有与之关联的内在名称(在所有文件系统中都不是这样)。文件名仅存在于目录中。
同一个文件可以在多个目录中有一个条目(硬链接)。然后,同一个文件可以有多个名称和多个路径。
文件系统在" .
"的每个目录条目中维护。和" ..
"
在这样的文件系统中,NAMES" .
"总是有目录ENTRIES。和" ..
"。这些条目由文件系统维护。
名称" .
"链接到自己的目录。
名称" ..
"指向父级目录的链接EXCEPT,用于链接到自身的顶级目录(.
和..
,因此链接到同一目录文件。)
所以当你使用" .
"和" ..
"如/dir1/dir2/../dir3/./dir4/whatever,
" .
"和" ..
"处理方式与" dir1"完全相同。和" dir2"。
此转换由文件系统完成;不是贝壳。
cd ...
不起作用,因为" ...
" (至少不正常)。
您可以创建一个名为" ...
"的目录。如果你愿意的话。
答案 1 :(得分:1)
你实际上可以实现这样的目标,不过这是一个丑陋的黑客:
您可以在每个命令输入bash之前以及每个命令之后运行命令。为此,您None
trap
伪信号,并将命令分别设置为DEBUG
。
PROMPT_COMMAND
这样,似乎就像在当前目录中有一个额外的条目一样:
trap 'ln -s ../.. ... &>/dev/null | true' DEBUG
PROMPT_COMMAND='rm ...'
虽然这仅适用于当前目录,因为在每次命令调用后都会删除符号链接。因此,pwd
# /tmp/crazy-stuff
ls -a
# . .. ... foo
ls -a .../tmp/crazy-stuff
# . .. ... foo
不会以这种方式工作。
另一个丑陋的黑客将是“覆盖”ls foo/bar/...
,以便它使用这些符号链接填充每个新目录。
答案 2 :(得分:0)
另见第二个答案的评论,尤其是Eliah:https://askubuntu.com/questions/327126/what-is-a-dot-only-named-folder
与您cd
进入某个目录subdir
时的方式大致相同,实际上是在跟踪指向该目录的指针,..
是操作系统添加的指针指向父目录,我想.
的工作方式相同。