我试图在Windows 7上使用带有msys的Ruby 1.9.3将文件复制到"/usr/bin"
。Msys很乐意从它的类似bash的shell中执行它 - $cp testscript.rb /usr/bin
可以解决这个问题。 / p>
但是从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)知道如何在它们之间进行转换。
有没有人见过这个问题?有什么建议吗?
答案 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指向的同一目录,所以这正是我需要的。