私はRuby開発者ではありませんが、1行のRubyスクリプトを使用して、Jenkinsで構築しているGrailsアプリケーションの3部構成のバージョン番号をインクリメントしようとしています。バージョン番号は、application.propertiesという単純なプロパティファイルに保存されます。これを行う方法はたくさんあることは知っていますが、ここでの私の質問はRubyに固有のものであり、なぜそれが機能しないのかということです。
テストのために、application.propertiesを1行に減らしました。
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
このコードは、OSXのRuby1.8.7では完全に機能しますが、LinuxのRuby1.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()でクロージャーを使用して他の例を試しましたが、正常に機能しているようです。