MacOS:如何“cd”进入符号链接?

MacOS:如何“cd”进入符号链接?

我有一个文件夹“abc”。我创建了一个符号链接:ln -s abc abclink。但是当我输入时,cd abclink它显示“没有这样的文件或目录”。

我可以看到链接,它具有“lrwxr-xr-x”权限,为什么它不起作用?如何让它正常工作?

答案1

通常,当您遇到这种情况时,您的目标无效。即 abc 不存在。是的,您可以创建指向不存在的事物的符号链接。

答案2

我有一个特别令人困惑的用例,它最终与接受的答案相同 - 目标目录不存在 - 但有一个额外的转折。

我正在创建一个指向环境变量中定义的目录的符号链接,我们将调用FOO

$ FOO="~/project"
$ ln -s foo "$FOO"

这似乎工作得很好:

$ ls -al
lrwxr-xr-x   1 jondoe  jondoe    10 Feb 20 02:25 foo -> ~/project

但是,当我尝试进入该foo文件夹时,出现错误:

$ cd foo
-bash: cd: foo: No such file or directory

这很奇怪,因为我们刚刚看到foo肯定存在。此外,也存在~/project

$ cd ~/project
$ ls -al
drwxr-xr-x  3 jondoe  jondoe  102 Feb 20 02:26 .
drwxr-xr-x  4 jondoe  jondoe  136 Feb 20 02:25 ..
-rw-r--r--  1 jondoe  jondoe    0 Feb 20 02:26 README.md

符号链接和它指向的文件夹怎么可能都存在,但我实际上无法使用符号链接?

事实证明,原因是FOO环境变量中有一个波浪符号~。由于我在创建符号链接时将此变量括在引号中,波浪符号没有经过 bash 扩展,因此生成的符号链接指向文字路径,~/project而不是project我的主目录中的文件夹。

答案3

该问题的可能来源:如果目标目录包含空格,则不需要在按键插入的值周围加上引号Tab,因为终端会使用反斜杠为您转义空格。

例如,假设有一个目录/tmp/Dir With Spaces/

ln -s /tmp/Dir\ With\ Spaces link1      <-- This works
ln -s "/tmp/Dir With Spaces" link2      <-- As does this
ln -s "/tmp/Dir\ With\ Spaces" link3    <-- But this one doesn't

通过查看输出你可以了解原因ls -l

lrwxr-xr-x    1 dave  staff          21 Jul 19 10:30 link1 -> /tmp/Dir With Spaces/
lrwxr-xr-x    1 dave  staff          21 Jul 19 10:31 link2 -> /tmp/Dir With Spaces/
lrwxr-xr-x    1 dave  staff          23 Jul 19 10:31 link3 -> /tmp/Dir\ With\ Spaces/

使用反斜杠转义路径中的空格,或者将未转义的路径括在引号中,而不是同时用引号。

相关内容