[ruby-core:120270] [Ruby master Feature#6648] Provide a standard API for retrieving all command-line flags passed to Ruby
From:
"Dan0042 (Daniel DeLorme) via ruby-core" <ruby-core@...>
Date:
2024-12-16 21:21:00 UTC
List:
ruby-core #120270
Issue #6648 has been updated by Dan0042 (Daniel DeLorme).
deivid (David Rodr=EDguez) wrote in #note-50:
> What if "user code" changed to a different directory before we restart, t=
hen `-C` will have a different effect if it's relative.
That's why I don't want `-C` in ruby_args at all. What if user code changed=
to a different directory **and intended** for that to be the CWD upon re-e=
xec? Then `-C` would break that intent. The way I see it, the CWD is part o=
f the environment; in the same way that a re-exec inherits any changes to t=
he ENV variables, a re-exec should inherit any changes to the CWD.
But anyway, I was talking specifically about your Bundler example; I didn't=
see the point of `-C` in that specific example. Bundler executes right fro=
m the start; there's no opportunity for "user code" to change to a differen=
t directory, is there?
----------------------------------------
Feature #6648: Provide a standard API for retrieving all command-line flags=
passed to Ruby
https://bugs.ruby-lang.org/issues/6648#change-111037
* Author: headius (Charles Nutter)
* Status: Assigned
* Assignee: matz (Yukihiro Matsumoto)
----------------------------------------
Currently there are no standard mechanisms to get the flags passed to the c=
urrently running Ruby implementation. The available mechanisms are not idea=
l:
* Scanning globals and hoping they have not been tweaked to new settings
* Using external wrappers to launch Ruby
* ???
Inability to get the full set of command-line flags, including flags passed=
to the VM itself (and probably VM-specific) makes it impossible to launch =
subprocess Ruby instances with the same settings.
A real world example of this is "((%bundle exec%))" when called with a comm=
and line that sets various flags, a la ((%jruby -Xsome.vm.setting --1.9 -S =
bundle exec%)). None of these flags can propagate to the subprocess, so odd=
behaviors result. The only option is to put the flags into an env var (((|=
JRUBY_OPTS|)) or ((|RUBYOPT|))) but this breaks the flow of calling a simpl=
e command line.
JRuby provides mechanisms to get all its command line options, but they req=
uire calling Java APIs from Ruby's API set. Rubinius provides its own API f=
or accessing comand-line options, but I do not know if it includes VM-level=
flags as well as standard Ruby flags.
I know there is a (({RubyVM})) namespace in the 2.0 line. If that namespace=
is intended to be general-purpose for VM-level features, it would be a goo=
d host for this API. Something like...
```
class << RubyVM
def vm_args; end # returns array of command line args *not* passed to t=
he target script
def script; end # returns the script being executed...though this overl=
aps with $0
def script_args; end # returns args passed to the script...though this =
overlaps with ARGV, but that is perhaps warranted since ARGV can be modifie=
d (i.e. you probably want the original args)
end
```
--=20
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.rub=
y-lang.org/