1

我正在尝试将文件复制到"/usr/bin"在 Windows 7 上将 Ruby 1.9.3 与 msys 一起使用。Msys 会很乐意从它的 bash 式 shell 中执行此操作 - 成功$cp testscript.rb /usr/bin了。

但从 Ruby 内部来看,情况完全不同,并且FileUtils.cp失败/usr/binC:/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)知道如何在它们之间进行转换。

有没有其他人看到这个问题?有什么建议么?

4

2 回答 2

0

在 Windows 下 msys(但不在 linux 下)有ENV['BIN']包含 bin 目录的路径,在本例中为"C:\msysgit\bin". 这实际上是 msys 中 /bin 和 /usr/bin 指向的同一个目录,所以这正是我所需要的。

于 2013-05-16T17:57:02.850 回答
0

Your best bet in my opinion is to use cygpath

However as you can expect this is a Cygwin program and will require the Cygwin dll, as can be seen here

$ ldd /bin/cygpath | grep /usr
        cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)

If this works for you, you can download cygpath from one of Cygwin mirrors

Example

box-soft.com/release/cygwin/cygwin-1.7.18-1.tar.bz2

After that it is very easy to convert, as you can see

$ cygpath C:/msysgit/bin
/usr/bin

$ cygpath -m /usr/bin
C:/msysgit/bin
于 2013-05-15T18:21:01.990 回答