在linux中使用chdir()实现cd命令

时间:2010-06-19 03:44:15

标签: linux chdir

我正在编写自己的shell程序。我目前正在使用chdir实现cd命令。 我想用以下选项实现chdir:

-P不要遵循符号链接
-L遵循符号链接(默认)

我发布了question here previously asking to know if a path is a symbolic link or actual path。但有了这些信息,我无法对如何处理上述问题有任何想法。

由于

2 个答案:

答案 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,它显示我当前目录的完全错误的绝对路径。