跟随符号链接后恢复“ cd ..”功能


13

如果我在终端中使用以下命令创建符号链接

ln -s /path/to/some/directory symbolicLink

然后点击链接

cd symbolicLink

终端似乎认为cwd ~/symbolicLink/实际上正在显示~/path/to/some/directory/(假设链接是在中~建立的)。这意味着如果我随后键入cd ..I ,则会被带回~,因为终端“认为”这是cwd的父级。

我需要进行哪些更改,以使cd ..自己成为我~/path/to/some/真正父母~/path/to/some/directory/

Answers:



5

cd -P行为上有一个细微的警告(由于篇幅过长而发布为答案):

$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..

pwd现在应该打印什么?从逻辑上讲,它可以是

  1. $dir1如果cd -P ..cd ..先和cd -- "$(readlink -f)"后,或
  2. /tmp如果cd -P ..cd -- "$(readlink -f)"先和cd ..之后。

实际上,它做到了后者,这意味着从pwd直觉上讲比“父”目录高两个级别。


1
谢谢!cd -P仍然可以解决我面临的问题,但是仍然有用。
2013年


2

我感到您很痛苦- bash由于这种行为,我认为基本上无法互动使用。

tcsh是用于交互使用的更加用户友好的外壳。离开bash编程(如果你坚持编写shell脚本的时候有很多的脚本语言中更好的替代品)。

要为任何用户更改外壳,请chsh在命令行中键入并按照提示进行操作(同样,我建议您阅读/bin/tcshO'Reilly优秀的书《使用csh和tcsh》,该书几乎可以用于所有未使用的内容)。


自从我写了这个答案以来,我学会了不再担心,喜欢Bash进行交互使用。但是我仍然无法处理cd符号链接的默认行为。我必须记住set -o physical在我.bashrc.bash_profile我使用的每台机器上都放进去。
dodgethesteamroller 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.