Setting environment variables

hi -

i have a ruby command line script, and i want to set/export an
environment variable thats available to other various shell scripts
that are called by this ruby…

can someone tell me how to do this?

i thot this might work, but not…

    ENV['        ENV['RSWF_C'] = 1   # use c bindings'] = 1

if i use (in ruby app:)
system(" RSWF_C=1; export RSWF_C" )

is this available to all other scripts called from this master ruby
script?

thanks for any help, I’m a bit lost!

/dc

  David "DC" Collier

mailto:[email protected]
+81 (0)80 6521 9559
skype: callto://d3ntaku

dc wrote:

hi -

i have a ruby command line script, and i want to set/export an
environment variable thats available to other various shell scripts
that are called by this ruby…

You can’t do that. Each call to “system()” launches a new shell
interpreter,
and they don’t share environments.

can someone tell me how to do this?

You cannot do this.

script?
No.

Now, please tell us what problem you are trying to solve, rather than
evaluate this approach to solving it.

On Sat, 25 Nov 2006, Paul L. wrote:

can someone tell me how to do this?

You cannot do this.

why not?

harp:~ > ruby -e’ ENV[“VAR”] = 42.to_s; system “env|grep VAR” ’
VAR=42

the environment is definitely shared. did i mis-understand?

kind regards.

-a

[email protected] wrote:

/ …

You cannot do this.

why not?

harp:~ > ruby -e’ ENV[“VAR”] = 42.to_s; system “env|grep VAR” ’
VAR=42

the environment is definitely shared. did i mis-understand?

My reply was based on his diagrammed effort to use one system call to
refer
to another system call:

if i use (in ruby app:)
system(" RSWF_C=1; export RSWF_C" )

is this available to all other scripts called from this
master ruby script?

The answer is obvious, and I provided it.

If instead his goal can be met by setting ENV variables within Ruby,
then
that solves the problem. But before suggesting this, I asked that the OP
first explain what he is trying to do.

On Sat, 25 Nov 2006, Paul L. wrote:

first explain what he is trying to do.
then we are both right - the OP can solve his problem, but not the way
he
intended.

regards.

-a

agreed.

Works on win32 also:

irb#1(main):011:0> ENV[‘time’] = Time.now.to_s and system(‘set|find
“time”’)
time=Fri Nov 24 21:55:23 -0500 2006
=> true

Paul L. wrote:

[email protected] wrote:

/ …

You cannot do this.

why not?

harp:~ > ruby -e’ ENV[“VAR”] = 42.to_s; system “env|grep VAR” ’
VAR=42

the environment is definitely shared. did i mis-understand?

My reply was based on his diagrammed effort to use one system call to
refer
to another system call:

if i use (in ruby app:)
system(" RSWF_C=1; export RSWF_C" )

is this available to all other scripts called from this
master ruby script?

The answer is obvious, and I provided it.

If instead his goal can be met by setting ENV variables within Ruby,
then
that solves the problem. But before suggesting this, I asked that the OP
first explain what he is trying to do.

Gee, I thought it was quite obvious that he was trying to export a shell
variable. Was it not at least somewhat obvious to you? His first
paragraph was relatively straightforward about that. Anyways, my point
is that you probably could’ve just gone ahead and given him the answer
– it would’ve added a mere 20 chars (max) to your post and been at
least 100 times more helpful. I dread the day when all of the Ruby hype
turns this community into the elitist/hostile environment that exists
for so many other languages.

hi -

thanks for the help everyone.

The answer is obvious, and I provided it.
indeed you did! you remind me of a very stoic colleague :slight_smile:

the background is this:

we have a server written in ruby
when it starts up it looks for some environment variables for which
mode to run in (eg using custom c extensions, or just pure ruby)

I have a completely different ruby script (for benchmarking)

so, the benchmark script needs to communicate with the server, and the
way things are setup now, this would be via environment vars.

so,

bench.rb >> sets ENV[‘FLAG’]
calls server.rb to start up (via a system() call currently)

server.rb >> on startup, looks for the FLAG env var and decides how to
run.

I tried to do some research on what exactly ENV is, within ruby, but
didnt get much out of google…its a bit too common of a word.

if i just call system() to set an env flag,
then export it
will it then be available to other processes?

any more info on ENV would also be helpful
(or where to look - i find the ruby docs really awful)

ri ENV
Nothing known about ENV

thanks for any help!

/dc

On 25/11/06, El Gato [email protected] wrote:

VAR=42

is this available to all other scripts called from this
Gee, I thought it was quite obvious that he was trying to export a shell

  David "DC" Collier

mailto:[email protected]
+81 (0)80 6521 9559
skype: callto://d3ntaku

On Sat, 25 Nov 2006, dc wrote:

I tried to do some research on what exactly ENV is, within ruby, but
didnt get much out of google…its a bit too common of a word.

Check Pixaxe. Even the on-line 1st edition should have a good discussion
of ENV.

if i just call system() to set an env flag,
then export it
will it then be available to other processes?

Under Unix, the environment is a set of keywords and associated values
available to the current process. When you fork a new process (creating
a child process), it inherits a COPY of the environment of the parent
process.

system forks a new child process. So that child, if it sets an
environment variable will have access to it, as will all of its
children. The parent (your ruby script) will not be affected, nor will
any other processes that are not children of the child that set the
environment variable.

Probably best thing to do would be to find something somewhere that
explains the Unix process model; once you understand that, simple
reasoning will let you figure out what’s going on and what you need to
do.

Oh, and changing ENV does indeed change the environment of the current
process:

 $ cat z
 system('echo before: $FOO')
 ENV['FOO'] = "now it's set"
 system('echo after: $FOO')
 $ ruby z
 before:
 after: now it's set
 $

cjs

[email protected] wrote:

If instead his goal can be met by setting ENV variables within Ruby, then
that solves the problem. But before suggesting this, I asked that the OP
first explain what he is trying to do.

then we are both right - the OP can solve his problem, but not the way he
intended.

I agree that we are both right, but you are at least 10% more right than
I
am. :slight_smile:

I should have read his post more carefully – I didn’t spend enough time
on
it.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs