【发布时间】:2013-05-15 17:59:36
【问题描述】:
我正在尝试在 Windows 7 上使用带有 msys 的 Ruby 1.9.3 将文件复制到 "/usr/bin"。Msys 很乐意从它的类似 bash 的 shell 中执行此操作 - $cp testscript.rb /usr/bin 可以解决问题。
但在 Ruby 内部却完全不同,FileUtils.cp 到 /usr/bin 或 C:/usr/bin 都失败了。问题似乎在于 msys 和 Ruby 如何处理路径,而他们在这一点上并不一致。
$ cd /usr/bin
$ pwd
/usr/bin
$ irb
irb(main):001:0> Dir.pwd
=> "C:/msysgit/bin"
果然,FileUtils.cp("testscript.rb", "C:/msysgit/bin") 有效。
这是我的问题:我如何在这些之间进行翻译?我知道我想将我的文件移动到/usr/bin,我可以推断到C:/usr/bin,但我不知道如何找出它真的是C:/msysgit/bin,我不能只是硬编码它,因为它需要不仅仅在我的设置上工作。
我需要一种方法来 (1) 说服 Dir 和 FileUtils 和 File 以与 msys shell 相同的方式理解路径或 (2) 知道如何在它们之间进行转换。
有没有其他人看到过这个问题?有什么建议吗?
【问题讨论】:
-
我假设 msys 有一个根/主目录,不(可能是 MSYSDIR)?结合mingw.org/wiki/Posix_path_conversion 应该足以让它们正确转换。
-
File.expand_path("/usr/bin")返回什么? -
我试过了——不幸的是
"c:/usr/bin" -
MSYSDIR 或等价物正是我所需要的!但它不是 MSYSDIR :(
-
好的,原来有
ENV['BIN'],其中包含"C:\msysgit\bin",我可以使用它。感谢您的帮助!