我正在编写一个可以跨平台工作的rake构建脚本(Mac OSX,Linux,Windows)。构建脚本将由CI server使用。
我希望我的脚本逻辑如下:
我目前正在使用 Pathname.new(location).absolute?,但它在Windows上无法正常工作。
您对此有何建议?
答案 0 :(得分:26)
require 'pathname'
(Pathname.new "/foo").absolute? # => true
(Pathname.new "foo").absolute? # => false
答案 1 :(得分:9)
您正在寻找的方法是realpath.
基本上你这样做:
absolute_path = Pathname.new(path).realpath
N.B。:Pathname模块指出在没有像路径名这样的unix的机器上使用是实验性的。所以它依赖于实现。看起来JRuby应该适用于Windows。
答案 2 :(得分:3)
有一个内置函数可以覆盖这两种情况并完全符合您的要求:
output_path = File.absolute_path(user_supplied_path, FOO_HOME)
诀窍是提供第二个参数。如果(并且仅当)第一个参数是相对路径,它将作为基本目录服务。
答案 3 :(得分:1)
Pathname
可以为您完成所有这些
require "pathname"
home= Pathname.new("/home/foo")
home + Pathname.new("/bin") # => #<Pathname:/bin>
home + Pathname.new("documents") # => #<Pathname:/home/foo/documents>
虽然我对Windows不确定。
答案 4 :(得分:1)
如果相对目录相对于当前工作目录,也可以使用File.expand_path
。
我检查了Linux和Windows,没有任何问题。
假设FOO_HOME
是工作目录,代码为:
output_path = File.expand_path user_supplied_relative_path