我正在尝试弄清楚如何告诉 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”,因为它可以让用户更准确地了解他们在文件系统中的位置......