我在 shell 中输入了 ./。输出结果如下:
bash: ./: Is a directory
看起来“./”会检查是否存在具有给定名称的目录。我试图查找有关此内容的文档以查看我的理解是否正确,但在网上找不到任何内容。有人可以向我解释一下吗?
答案1
在 Bash 手册中可能找不到对此的一般定义,但是POSIX 规范(路径名解析部分):
特殊文件名点应引用其前身指定的目录。
那么,如果我们只有 ,前身是什么.
?我强调了重要的部分:
如果路径名不以斜杠开头,则路径名的第一个文件名的前身应被视为当前工作目录过程
还,
包含至少一个非斜杠字符并以一个或多个尾部斜杠结尾的路径名应被解析为在路径名后附加一个点字符('.')
因此,当您输入时,./
它将被解析为./.
,这基本上指向您当前的工作目录。当您在 shell 中输入某些内容并点击时Enter,shell 将尝试将第一部分作为命令执行。(基本上是直到第一个空格为止的第一串字符。)
没有名为 的命令或可执行文件./.
,因此它会失败并告诉您./
“是一个目录”。有趣的是,.
是一个命令(它是一个内置命令,也称为source
),因此当您输入时,.
您会得到:bash: .: filename argument required
。
答案2
正如其他人所写,./
是当前目录的名称。当您./
在 bash 提示符下键入并按 Enter 时,您尝试将当前目录作为命令执行,这当然会失败,并且 bash 会向您显示消息(解释),“我无法这样做。./
是一个目录,我无法将目录作为命令执行。”
答案3
表示.
当前目录。你可以将其用作./
当前目录中任何文件的前缀。
类似地,..
表示前一个(更高)目录。它通常用于转到更高级别的目录,例如cd ../../../
给定一个包含以下内容的文件系统:
# Comments start with a hash and aren't parsed
/ # root directory
/foo/ # first level directory
/foo/bar/ # second level directory
/foo/bar/baz # third level directory
/foo/bar/baz/qux # a file in the third level directory
如果您在第三级主管 (baz) 中,并且您运行ls
,您将看到qux
。如果您运行ls .
,您将获得相同的输出,就像您运行 一样ls ./
。
如果您在第三级目录 (baz),并且您运行ls ..
和,ls ../
则都会返回baz
。也就是说,返回上一级目录的内容。
答案4
在 Linux 中,./ 表示当前目录(而 ../ 表示父目录)。
如果您执行 ls -a,您将看到 . 和 .. 列为目录(您需要 -a 因为 . 代表隐藏目录)