Bash / shell / OS解释。和.. - 我能定义......?

时间:2016-04-13 18:56:27

标签: bash shell operating-system kernel posix

...作为路径(与我不关心的范围,例如{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.42autocd shell选项。

3 个答案:

答案 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时的方式大致相同,实际上是在跟踪指向该目录的指针,..是操作系统添加的指针指向父目录,我想.的工作方式相同。