我正在编写自己的shell程序。我目前正在使用chdir实现cd命令。 我想用以下选项实现chdir:
-P不要遵循符号链接
-L遵循符号链接(默认)
我发布了question here previously asking to know if a path is a symbolic link or actual path。但有了这些信息,我无法对如何处理上述问题有任何想法。
由于
答案 0 :(得分:0)
也许我误解了,但你只想要(伪代码):
is_symlink = method_from_other_question();
if(is_symlink and arg(-P))
fail("Can't switch directory -- is a symlink");
如果你已经尝试过这样的东西并且它不起作用,请在你的问题中包含代码,我们可以帮助调试它
答案 1 :(得分:0)
贝壳通常会发现很多诡计以找到真正的目录名称。为了方便用户,他们还伪造了很多东西。 E.g:
$ pwd
/home/auser
$ ls -l
adir -> some/place/
some/
$ cd adir
$ pwd
/home/auser/adir
$ cd ..
$ pwd
/home/auser
看起来合乎逻辑?然后再看一下:..
中的/home/auser/some/place
指向/home/auser/some
,而不是/home/auser
,而cd ..
则指向后者。
IOW,除了始终在内存中保留当前目录的绝对路径并在执行cd
时完全解析它(并检查它的每个元素)时,别无他法。
是的,它不可靠。在过去有一次我设法愚弄bash,它显示我当前目录的完全错误的绝对路径。