我不是 Ruby 开发人员,但我正在尝试使用 1 行 Ruby 脚本来增加我们使用 Jenkins 构建的 Grails 应用程序的 3 部分版本号。版本号存储在一个名为 application.properties 的简单属性文件中。我知道有很多方法可以做到这一点,但我的问题是针对 Ruby 以及为什么它不起作用。
为了测试,我将 application.properties 减少到一行:
app.version=0.2.8
我想做的就是增加最后一个数字。而已。因此,我在网上找到了一些代码并对其进行了破解:
ruby -pi.bak -e 'sub(/^app\.version=(\d+)\.(\d+)\.(-?\d+)/) { "app.version=#{$1}.#{$2}.#{$3.to_i.next}" }' application.properties
此代码在 OS X 上的 Ruby 1.8.7 上完美运行,但在 Linux 上的 Ruby 1.9.3 上失败:
-e:1:in `sub': wrong number of arguments (1 for 1..2) (ArgumentError)
from -e:1:in `sub'
from -e:1:in `<main>'
请注意,如果直接应用于字符串文字,则该表达式在 Linux 上有效:
ruby -e 'puts "app.version=0.2.8".sub(/^app\.version=(\d+)\.(\d+)\.(-?\d+)/) { "app.version=#{$1}.#{$2}.#{$3.to_i.next}" }'
我也尝试过 gsub 但这也不起作用(但出于不同的原因)。
我必须在这里遗漏一些简单的东西。我已经尝试过使用带有 sub() 的闭包的其他示例,它似乎工作正常。