Ruby 1.9.3意外的msys下的文件行为

时间:2013-05-15 17:59:37

标签: ruby msys

我试图在Windows 7上使用带有msys的Ruby 1.9.3将文件复制到"/usr/bin"。Msys很乐意从它的类似bash的shell中执行它 - $cp testscript.rb /usr/bin可以解决这个问题。 / p>

但是从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)知道如何在它们之间进行转换。

有没有人见过这个问题?有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我认为你最好的选择是使用 cygpath

但是你可以期待这是一个Cygwin程序,需要Cygwin dll,这里可以看到

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

如果这适合您,您可以从其中一个下载cygpath Cygwin mirrors

实施例

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

之后很容易转换,如你所见

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

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

答案 1 :(得分:0)

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