我正面临着一种ls
我无法搜索到的非常混乱的行为。它显示目录中有内容,但只有当我在创建这些内容的目录中时才显示。
让我演示给你看:
ciprian Documents $ pwd
/Users/ciprian/Documents
ciprian Documents $ ls ../Downloads/rss22/
22rss-USB/
ciprian Documents $ ls ../Downloads/rss22/22rss-USB/
HTML/
ciprian Documents $ cd ../Downloads/rss22
ciprian rss22 $ ls
ciprian rss22 $ ls 22rss-USB/
gls: cannot access '22rss-USB/': No such file or directory
在我cd
编辑到之后../Downloads/rss22
,它的内容显示为空。cd ~/Desktop
如果 I然后 I ,它也显示为空ls ../Downloads/rss22/
,就像这里的第一种情况。
对我来说,这表明可能有一个名为../Downloads/rss22
inside Documents
的文件夹。但我无法弄清楚如何显示它。ls -a ~/Documents
不显示与这些文件夹相关的任何内容。
到底是怎么回事?
这些文件是通过尝试从存档中部分提取来创建的:unzip 22rss-USB.zip "22rss-USB/HTML/**/*" -d ../Downloads/rss22/
作为参考,我在macOS上,但我认为这不相关(它是 Unix,对吧?)。我正在使用 Bash 5.1.16(从默认 zsh 更改)。
输出type pwd
:pwd 是一个 shell 内置命令。
事实证明,如果我这样做cd -P ../Downloads/igarss22/
,它就会显示我期望的内容。我在哪里可以看到更多相关信息?man cd
没有显示任何关于-P
.
现在,之后cd -P ../Downloads/igarss22/
ciprian Documents $ cd -P ../Downloads/igarss22
ciprian igarss22 $ pwd
/Users/ciprian/Library/CloudStorage/OneDrive/Downloads/igarss22
正确的。所以我忘了这个;my~/Documents
是指向我的 OneDrive 下文件夹的符号链接:
$ ll ~/ | grep Doc
lrwxr-xr-x 1 ciprian 38 May 19 2022 Documents -> /Users/ciprian/OneDrive/Documents
由于macOS v12 (Monterey)的一些魔法和变化,它实际上位于/Users/ciprian/Library/CloudStorage/OneDrive
.
我仍然不确定到底发生了什么
不同之处在于物理与逻辑处理
..
:您显然有两个单独的
Downloads
目录:/Users/ciprian/Downloads
/Users/ciprian/Library/CloudStorage/OneDrive/Downloads
一些 shell,包括
bash
所有 POSIX shell,都可以选择..
在cd
命令中将其视为“完全按照用户表达的方式获取当前路径,切断最右边的元素并更改为结果路径”。通过符号链接,这将作为逻辑“回到我们来自的地方”,从/Users/ciprian/Library/CloudStorage/OneDrive/Documents
(符号链接到,并被用户称为~/Documents
)返回到/Users/ciprian
(因此此时的新路径只是~
),然后从那里返回到/Users/ciprian/Downloads
。如果您使用cd -L
,这显然是您将获得的行为。其他程序通常不会这样做:它们将改为遵循物理路径,因此对于它们来说,将目录更改为
../Downloads
从/Users/ciprian/Library/CloudStorage/OneDrive/Documents
始终意味着更改为/Users/ciprian/Library/CloudStorage/OneDrive/Downloads
. 这也是您将获得的cd -P
。如果您不喜欢 shell 的这个(错误)特性,可能有一种特定于 shell 的方法可以禁用它。使用
bash
shell,将set -P
or添加set -o physical
到您的~/.bashrc
或类似的 shell 启动脚本将使bash
所有cd
命令的行为都具有该-P
选项,除非-L
明确使用该选项。注意。的文档
-P
位于man bash
(SHELL BUILTIN COMMANDS 部分),因为cd
它是 Bash 的内部命令。