给定一个在类Unix系统中的绝对或相对路径,我想确定在解析任何中间符号链接后的目标的完整路径。同时解析~username表示方法将获得额外奖励。
如果目标是一个目录,则可能可以chdir()进入该目录然后调用getcwd(),但我真的想从shell脚本中执行此操作,而不是编写一个C辅助程序。不幸的是,shell往往会试图隐藏符号链接的存在(这是OS X上的bash):
$ ls -ld foo bar
drwxr-xr-x 2 greg greg 68 Aug 11 22:36 bar
lrwxr-xr-x 1 greg greg 3 Aug 11 22:36 foo -> bar
$ cd foo
$ pwd
/Users/greg/tmp/foo
$
我想要的是一个resolve()函数,当从上述示例中的tmp目录执行时,resolve("foo")应返回"/Users/greg/tmp/bar"。
readlink
在 OSX 上可以使用,但需要另一种语法:readlink $path
,不要 加上-f
。 - halloleo