ENV shows partial environment only

  • Thread starter Eero Saynatkari
  • Start date
E

Eero Saynatkari

--lEGEL1/lMxI0MVQ2
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi!

It seems that Ruby is not picking up the complete environment
to be accessible through ENV--and I seem to recall this is by
design. Cursory poking-around in {hash,ruby,eval}.c did not=20
reveal anything particularly enlightening. Could someone shed
light on this if it indeed is done intentionally by Ruby and
not due to some strangeness in the C env functions?

An example session:

18:28:43 ruerue@yawn > ruby -v
ruby 1.8.5 (2006-08-25) [amd64-freebsd6]

18:28:51 ruerue@yawn > set | ruby -e 'p ARGF.readlines.map {|l|
l.split("=3D").first if l =3D~ /^[A-Z]/}.compact'

["BASH", "BASH_ARGC", "BASH_ARGV", "BASH_LINENO", "BASH_SOURCE",
"BASH_VERSINFO", "BASH_VERSION", "BLOCKSIZE", "COLUMNS", "DIRSTACK",
"DISPLAY", "EDITOR", "EUID", "FTP_PASSIVE_MODE", "GROUPS", "HISTFILE",
"HISTFILESIZE", "HISTSIZE", "HOME", "HOSTNAME", "HOSTTYPE", "IFS",
"LINES", "LOGNAME", "MACHTYPE", "MAIL", "MAILCHECK", "OPTERR", "OPTIND",
"OSTYPE", "PATH", "PIPESTATUS", "PPID", "PR_BROWN", "PR_CLEAR",
"PR_LTGREY", "PS1", "PS2", "PS4", "PWD", "RS_EMAIL", "RS_NAME", "SHELL",
"SHELLOPTS", "SHLVL", "TERM", "TERMCAP", "UID", "USER", "WINDOWID",
"XAUTHORITY", "XTERM_SHELL", "XTERM_VERSION"]

18:28:54 ruerue@yawn > ruby -e 'p ENV.keys'

["SHELL", "TERM", "WINDOWID", "XTERM_SHELL", "RS_NAME", "USER",
"TERMCAP", "FTP_PASSIVE_MODE", "PATH", "MAIL", "BLOCKSIZE", "PWD",
"EDITOR", "XTERM_VERSION", "HOME", "SHLVL", "LOGNAME", "RS_EMAIL",
"DISPLAY", "XAUTHORITY", "_"]

--lEGEL1/lMxI0MVQ2
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (FreeBSD)

iD8DBQFFJDvf7Nh7RM4TrhIRAnwKAKDTWs4chsPS4fdiO8N6Haeq/ipWNwCg9Btn
QrocwLeIm9yaS1bYNwpLbiQ=
=eXYR
-----END PGP SIGNATURE-----

--lEGEL1/lMxI0MVQ2--
 
L

Logan Capaldo

Hi!

It seems that Ruby is not picking up the complete environment
to be accessible through ENV--and I seem to recall this is by
design. Cursory poking-around in {hash,ruby,eval}.c did not
reveal anything particularly enlightening. Could someone shed
light on this if it indeed is done intentionally by Ruby and
not due to some strangeness in the C env functions?

An example session:

18:28:43 ruerue@yawn > ruby -v
ruby 1.8.5 (2006-08-25) [amd64-freebsd6]

18:28:51 ruerue@yawn > set | ruby -e 'p ARGF.readlines.map {|l|
l.split("=").first if l =~ /^[A-Z]/}.compact'

["BASH", "BASH_ARGC", "BASH_ARGV", "BASH_LINENO", "BASH_SOURCE",
"BASH_VERSINFO", "BASH_VERSION", "BLOCKSIZE", "COLUMNS", "DIRSTACK",
"DISPLAY", "EDITOR", "EUID", "FTP_PASSIVE_MODE", "GROUPS", "HISTFILE",
"HISTFILESIZE", "HISTSIZE", "HOME", "HOSTNAME", "HOSTTYPE", "IFS",
"LINES", "LOGNAME", "MACHTYPE", "MAIL", "MAILCHECK", "OPTERR", "OPTIND",
"OSTYPE", "PATH", "PIPESTATUS", "PPID", "PR_BROWN", "PR_CLEAR",
"PR_LTGREY", "PS1", "PS2", "PS4", "PWD", "RS_EMAIL", "RS_NAME", "SHELL",
"SHELLOPTS", "SHLVL", "TERM", "TERMCAP", "UID", "USER", "WINDOWID",
"XAUTHORITY", "XTERM_SHELL", "XTERM_VERSION"]

18:28:54 ruerue@yawn > ruby -e 'p ENV.keys'

["SHELL", "TERM", "WINDOWID", "XTERM_SHELL", "RS_NAME", "USER",
"TERMCAP", "FTP_PASSIVE_MODE", "PATH", "MAIL", "BLOCKSIZE", "PWD",
"EDITOR", "XTERM_VERSION", "HOME", "SHLVL", "LOGNAME", "RS_EMAIL",
"DISPLAY", "XAUTHORITY", "_"]

Are you sure all those variables are "exported"? (For instance, I
seriously doubt IFS is ever exported by a sane shell unless you
explicitly tell it to do so.)
 
A

ara.t.howard

Hi!

It seems that Ruby is not picking up the complete environment
to be accessible through ENV--and I seem to recall this is by
design. Cursory poking-around in {hash,ruby,eval}.c did not
reveal anything particularly enlightening. Could someone shed
light on this if it indeed is done intentionally by Ruby and
not due to some strangeness in the C env functions?

An example session:

18:28:43 ruerue@yawn > ruby -v
ruby 1.8.5 (2006-08-25) [amd64-freebsd6]

18:28:51 ruerue@yawn > set | ruby -e 'p ARGF.readlines.map {|l|
l.split("=").first if l =~ /^[A-Z]/}.compact'

["BASH", "BASH_ARGC", "BASH_ARGV", "BASH_LINENO", "BASH_SOURCE",
"BASH_VERSINFO", "BASH_VERSION", "BLOCKSIZE", "COLUMNS", "DIRSTACK",
"DISPLAY", "EDITOR", "EUID", "FTP_PASSIVE_MODE", "GROUPS", "HISTFILE",
"HISTFILESIZE", "HISTSIZE", "HOME", "HOSTNAME", "HOSTTYPE", "IFS",
"LINES", "LOGNAME", "MACHTYPE", "MAIL", "MAILCHECK", "OPTERR", "OPTIND",
"OSTYPE", "PATH", "PIPESTATUS", "PPID", "PR_BROWN", "PR_CLEAR",
"PR_LTGREY", "PS1", "PS2", "PS4", "PWD", "RS_EMAIL", "RS_NAME", "SHELL",
"SHELLOPTS", "SHLVL", "TERM", "TERMCAP", "UID", "USER", "WINDOWID",
"XAUTHORITY", "XTERM_SHELL", "XTERM_VERSION"]

18:28:54 ruerue@yawn > ruby -e 'p ENV.keys'

["SHELL", "TERM", "WINDOWID", "XTERM_SHELL", "RS_NAME", "USER",
"TERMCAP", "FTP_PASSIVE_MODE", "PATH", "MAIL", "BLOCKSIZE", "PWD",
"EDITOR", "XTERM_VERSION", "HOME", "SHLVL", "LOGNAME", "RS_EMAIL",
"DISPLAY", "XAUTHORITY", "_"]

it's been a while, but are you confusing shell vars with env vars? i think
'set' only reports the former:

harp:~ > export FOO=ENV_BAR

harp:~ > set FOO=SHELL_BAR

harp:~ > sh

harp:~ > echo $FOO
ENV_BAR

regards.

-a
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,045
Latest member
DRCM

Latest Threads

Top