【发布时间】:2010-07-17 00:43:08
【问题描述】:
我有一个构建系统工具,它使用getcwd() 来获取当前工作目录。这很好,只是有时人们的路径中有空格,而构建系统不支持这一点。你会认为你可以只做一个符号链接:
ln -s "Directory With Spaces" DirectoryWithoutSpaces
然后快乐。但不幸的是,getcwd() 解析了所有的符号链接。我尝试使用getenv("PWD"),但它指向的路径与我从getcwd() 返回的路径不同。我认为我责怪make -C 没有更新环境变量。现在,getcwd() 给了我一条这样的路径:
/Users/carl/Directory With Spaces/Some/Other/Directories
getenv("PWD") 给了我:
/Users/carl/DirectoryWithoutSpaces
那么 - 有没有像 getcwd() 这样的函数不能解析符号链接?
编辑:
我变了
make -C Some/Other/Directories
到
cd Some/Other/Directories ; make
然后getenv("PWD") 起作用了。如果没有其他解决方案,我可以使用它。
【问题讨论】:
-
程序的哪一部分因为路径中的空格而无法运行?
-
mv ~/"Directory With Spaces" ~/DirectoryWithoutSpaces? :P -
@eruciform,有问题的工具会生成一堆makefile;如果这个路径名中有空格,由于很多原因,它会窒息。我已经进行了编辑中提到的更改,现在我正在整体修复空格问题,但不管怎样,生成带有混合符号链接和解析路径名的 makefile 有点奇怪。我上面的编辑解决了这个问题,但我仍然对替代解决方案感兴趣。
-
@eruciform,经过进一步调查,修复所有这些垃圾以使用空格是永远不会发生的。正确的解决方案是删除绝对路径要求,而不是试图让空间发挥作用。
标签: c macos makefile getcwd getenv