🦔
[Feature #6648] 実行中の ruby のコマンドラインフラグを取得するAPIを追加するチケット
[Feature #6648] Provide a standard API for retrieving all command-line flags passed to Ruby
- 実行中の ruby に渡されたすべてのコマンドラインフラグを取得するための API を追加する提案
- モチベーションとしては実行した ruby と同じオプションでサブプロセスを実行するときに利用したいみたいですね
- JRuby はコマンドラインオプションを取得する仕組みはあるけど Java の API を呼び出す必要があったり Rubinius も独自 API を提供しているが VM レベルのフラグが含まれているかどうかはわからないみたいですね
- 12年前のチケットなんですが今年の4月頃からまた議論が活発化しています
- https://bugs.ruby-lang.org/issues/6648#note-10 このあたり
- 異なるバージョンの
.ruby-version
があればそれを参照してそのバージョンのスクリプトを再実行する、みたいなことがしたかったらしい
- イメージこんな感じ?
RbConfig.ruby # 実行した ruby のパス
RbConfig.ruby_args # ruby のコマンドライン引数
RbConfig.script # 実行中のスクリプト $0 と同等
RbConfig.script_args # スクリプトの引数 ARGV と同等
# こんな感じでサブプロセスを実行する想定
exec(RbConfig.ruby, *RbConfig.ruby_args, *RbConfig.script, *RbConfig.script_args)
- また https://bugs.ruby-lang.org/issues/6648#note-23 では『コマンドラインを解析して
Kernel#exec
するのではなくて『より専用の API を追加する』ほうがいいのでは』ともコメントされてますね- Windows 関連で
Kernel#exec
を経由して実行するのはよくないのでは?という話がでてきてます
- Windows 関連で
- いろいろと議論されていたんですが現状だと
Process.argv
を追加する流れぽいのかな
Discussion