Jenkinsによるビルドテストにおいて、リソースを制限した状態でRubyスクリプトを実行する必要が生じた。
Ruby自身にはリソースの制限を行う機能がないので(setrlimitをラップした拡張ライブラリはないかな?)、何らかの方法でリソース制限を行ったのちにスクリプトを起動しなければならない。
もちろんビルドスクリプトに
ulimit ...
ruby -e '...'
と書いてもよいのだが、Rubyスクリプト部が複雑化するとクォート地獄に落ちるのが必至なので、以前書いた -x オプションを使った。
ulimit ...
exec ruby -x "$0" "$@"
#! ruby
...
exec 後の ruby には -x が与えてあるので #! ruby までの部分を無視してくれる。これでシェルレベルでリソースのお膳立てをしてから ruby インタプリタを起動出来る。