![在 Linux(CentOS 5)上,记住我们何时跟踪了符号链接并准备再次“cd ..”](https://linux22.com/image/1258823/%E5%9C%A8%20Linux%EF%BC%88CentOS%205%EF%BC%89%E4%B8%8A%EF%BC%8C%E8%AE%B0%E4%BD%8F%E6%88%91%E4%BB%AC%E4%BD%95%E6%97%B6%E8%B7%9F%E8%B8%AA%E4%BA%86%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E5%B9%B6%E5%87%86%E5%A4%87%E5%86%8D%E6%AC%A1%E2%80%9Ccd%20..%E2%80%9D.png)
我正在尝试弄清楚如何告诉 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”,因为它可以让用户更准确地了解他们在文件系统中的位置......