给定一个路径,如何确定它在Ruby中的绝对/相对?

Man*_*rty 12 ruby cross-platform

我正在编写一个可以跨平台工作的rake构建脚本(Mac OSX,Linux,Windows).构建脚本将由 CI服务器使用.

我希望我的脚本的逻辑如下:

  1. 如果确定路径是相对路径,则通过使output_path = FOO_HOME + user_supplied_relative_path使其成为绝对路径
  2. 如果路径被确定为绝对路径,则按原样使用

我目前正在使用Pathname.new(location).absolute?但它在Windows上无法正常工作.

你会为此建议什么方法?

小智 27

require 'pathname'
(Pathname.new "/foo").absolute? # => true
(Pathname.new "foo").absolute? # => false
Run Code Online (Sandbox Code Playgroud)


EmF*_*mFi 9

您正在寻找的方法是realpath.

基本上你这样做:

absolute_path = Pathname.new(path).realpath
Run Code Online (Sandbox Code Playgroud)

注意:Pathname模块指出在没有像路径名这样的unix的机器上使用是实验性的.所以它依赖于实现.看起来JRuby应该适用于Windows.

  • `Pathname#realpath` 假设你的相对路径是相对于当前工作目录的,它可能不是用户的家。 (2认同)

hag*_*llo 5

有一个内置函数可以涵盖这两种情况并且完全符合您的要求:

output_path = File.absolute_path(user_supplied_path, FOO_HOME)
Run Code Online (Sandbox Code Playgroud)

诀窍是提供第二个参数。当(且仅当)第一个参数是一个相对路径时,它作为一个基本目录。