在 Linux(CentOS 5)上,记住我们何时跟踪了符号链接并准备再次“cd ..”

在 Linux(CentOS 5)上,记住我们何时跟踪了符号链接并准备再次“cd ..”

我正在尝试弄清楚如何告诉 shell(tcsh)记住我何时进入符号链接文件夹,并允许“cd ..”导航回符号链接,而不是仅仅导航到链接到的文件夹的父目录...

例如:

$ ls -al /jobs
tech -> /mnt/projects1/tech
temp -> /mnt/projects2/temp

$ cd /jobs/tech
$ cd ../temp
../temp: No such file or directory.

$ pwd
/mnt/projects1/tech

知道如何做到这一点吗?我感觉这是一个可以在某处设置的 shell 设置……

干杯

答案1

如果你不需要执行多个“步骤”,你可以cd -使用

因此,将符号链接环境变量设置为忽略似乎会得到您想要的响应
来自手册页:

symlinks (+) 可以设置为几个不同的值来控制符号链接('symlink')解析:

如果设置为“chase”,则每当当前目录更改为包含符号链接的目录时,它都会扩展为链接指向的目录的真实名称。这不适用于用户的主目录;这是一个错误。

如果设置为“ignore”,shell 会尝试构建相对于链接交叉前的当前目录的当前目录。这意味着通过符号链接执行 cding 然后“cd ..”会返回到原始目录。这仅影响内置命令和文件名完成。

如果设置为“expand”,shell 会尝试通过实际扩展看起来像路径名的参数来修复符号链接。这会影响任何命令,而不仅仅是内置命令。不幸的是,这对难以识别的文件名(例如嵌入在命令选项中的文件名)不起作用。可以通过引用来防止扩展。虽然此设置通常是最方便的,但当它无法识别应扩展的参数时,有时会产生误导和混淆。折衷方案是使用“ignore”并在必要时使用编辑器命令 normalize-path(默认情况下绑定到 ^Xn)。

答案2

我认为我已经设法在这里回答了我自己的问题,至少对于 tcsh 来说是这样……

在 tcsh 手册页上,它讨论了“符号链接”变量......

所以,我现在可以这样做:

$ set symlinks=expand

$ cd /jobs/tech
$ pwd
/mnt/projects1/tech
$ echo $cwd
/jobs/tech

$ cd ..
$ echo $cwd
/jobs

由于所有这些,我很想将 pwd 别名为“echo $cwd”,因为它可以让用户更准确地了解他们在文件系统中的位置......

相关内容