Ah, disregard that last bit. You're showing the System.getenv()
function and I'm saying it doesn't exist! (And it doesn't pre-JDK 1.5).
So you can do this to fiddle a few variables for your child:
ENV = [SOMEVAR:123, 'FUNNY VAR':'abc']
// Gotta copy the map from getenv() because it is immutable.
ENV.putAll(System.getenv())
ENV.MYVAR = 'Foo Bar'
ENV.X = 'Baz'
ENV.PATH += File.pathSeparator + 'somewhere'
String[] ENVtoArray() { ENV.collect { k, v -> "$k=$v" } }
ENVtoArray()
==>
{SOMEVAR=123, FUNNY VAR=abc, SSH_AUTH_SOCK=/tmp/launch-VWyelV/Listeners,
LANG=en_US.UTF-8, DISPLAY=/tmp/launch-twtM1a/:0,
SAL_ENABLE_FILE_LOCKING=1,
MONO_ROOT=/Applications/NeoOffice.app/Contents/MacOS,
LC_CTYPE=en_US.UTF-8,
TMPDIR=/var/folders/Dj/DjFTD291EaCFdWEk2GRkeU+++TI/-Tmp-/,
__CF_USER_TEXT_ENCODING=0x1F5:0:0, MONO_DISABLE_SHM=yes, USER=jim,
SECURITYSESSIONID=992fc0,
OPENOFFICE_MOZILLA_FIVE_HOME=/Applications/NeoOffice.app/Contents/MacOS,
DYLD_FALLBACK_LIBRARY_PATH=/Applications/NeoOffice.app/Contents/MacOS:/usr/lib:/usr/local/lib:/Users/jim/lib:,
COMMAND_MODE=legacy,
Apple_PubSub_Socket_Render=/tmp/launch-g1sjx7/Render, HOME=/Users/jim,
MONO_CONFIG=/Applications/NeoOffice.app/Contents/MacOS/mono/2.0/machine.config,
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home,
MONO_CFG_DIR=/Applications/NeoOffice.app/Contents/MacOS,
LC_ALL=en_US.UTF-8,
PATH=/Applications/NeoOffice.app/Contents/MacOS:/bin:/sbin:/usr/bin:/usr/sbin::/usr/bin:/bin:/usr/sbin:/sbin:somewhere,
SHELL=/bin/bash, LOGNAME=jim, MYVAR=Foo Bar, X=Baz}
"bash -c set".execute(ENVtoArray(), null).text
==>
Apple_PubSub_Socket_Render=/tmp/launch-g1sjx7/Render
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_EXECUTION_STRING=set
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="17" [3]="1" [4]="release"
[5]="i386-apple-darwin9.0")
BASH_VERSION='3.2.17(1)-release'
COMMAND_MODE=legacy
DIRSTACK=()
DISPLAY=/tmp/launch-twtM1a/:0
DYLD_FALLBACK_LIBRARY_PATH=/Applications/NeoOffice.app/Contents/MacOS:/usr/lib:/usr/local/lib:/Users/jim/lib:
EUID=501
FUNNY VAR=abc
GROUPS=()
HOME=/Users/jim
HOSTNAME=MacMini.local
HOSTTYPE=i386
IFS=$' \t\n'
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LOGNAME=jim
MACHTYPE=i386-apple-darwin9.0
MONO_CFG_DIR=/Applications/NeoOffice.app/Contents/MacOS
MONO_CONFIG=/Applications/NeoOffice.app/Contents/MacOS/mono/2.0/machine.config
MONO_DISABLE_SHM=yes
MONO_ROOT=/Applications/NeoOffice.app/Contents/MacOS
MYVAR='Foo Bar'
OPENOFFICE_MOZILLA_FIVE_HOME=/Applications/NeoOffice.app/Contents/MacOS
OPTERR=1
OPTIND=1
OSTYPE=darwin9.0
PATH=/Applications/NeoOffice.app/Contents/MacOS:/bin:/sbin:/usr/bin:/usr/sbin::/usr/bin:/bin:/usr/sbin:/sbin:somewhere
PPID=27907
PS4='+ '
PWD=/
SAL_ENABLE_FILE_LOCKING=1
SECURITYSESSIONID=992fc0
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=1
SOMEVAR=123
SSH_AUTH_SOCK=/tmp/launch-VWyelV/Listeners
TERM=dumb
TMPDIR=/var/folders/Dj/DjFTD291EaCFdWEk2GRkeU+++TI/-Tmp-/
UID=501
USER=jim
X=Baz
_=/bin/bash
__CF_USER_TEXT_ENCODING=0x1F5:0:0
Jim
Post by Jim WhiteGroovy pretty much can only do system things that Java can do and you'll
notice there is no System.setenv.
But usually the reason to "set" environment variables to give them to a
forked child process. In Java that is done with Runtime.exec.
ENV = [SOMEVAR:123, 'FUNNY VAR':'abc']
INHERITED_ENVVARS = ['PATH', 'LD_LIBRARY_PATH', 'DYLD_LIBRARY_PATH',
'SHLIB_PATH', 'LIBPATH']
INHERITED_ENVVARS.each {
def v = System.getenv(it); if (v) { ENV[it] = v }
}
ENV.MYVAR = 'Foo Bar'
ENV.X = 'Baz'
String[] ENVtoArray() { ENV.collect { k, v -> "$k=$v" } }
ENVtoArray()
==>
{SOMEVAR=123, FUNNY VAR=abc,
PATH=/Applications/NeoOffice.app/Contents/MacOS:/bin:/sbin:/usr/bin:/usr/sbin::/usr/bin:/bin:/usr/sbin:/sbin,
MYVAR=Foo Bar, X=Baz}
"bash -c set".execute(ENVtoArray(), null).text
==>
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_EXECUTION_STRING=set
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="17" [3]="1" [4]="release"
[5]="i386-apple-darwin9.0")
BASH_VERSION='3.2.17(1)-release'
DIRSTACK=()
EUID=501
FUNNY VAR=abc
GROUPS=()
HOSTNAME=MacMini.local
HOSTTYPE=i386
IFS=$' \t\n'
MACHTYPE=i386-apple-darwin9.0
MYVAR='Foo Bar'
OPTERR=1
OPTIND=1
OSTYPE=darwin9.0
PATH=/Applications/NeoOffice.app/Contents/MacOS:/bin:/sbin:/usr/bin:/usr/sbin::/usr/bin:/bin:/usr/sbin:/sbin
PPID=27669
PS4='+ '
PWD=/
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=1
SOMEVAR=123
TERM=dumb
UID=501
X=Baz
_=/bin/bash
Your next question is then "How do I find out all the names of the
system environment variables?". Can't do it in pure Java, but that
MYVARNAMES = "/usr/bin/env".execute().text.split('\n').collect
{ (it =~ /^[^=]+/)[0] }
==>
[PATH, TMPDIR, SHELL, HOME, USER, LOGNAME, DISPLAY, SSH_AUTH_SOCK,
Apple_PubSub_Socket_Render, __CF_USER_TEXT_ENCODING, SECURITYSESSIONID,
COMMAND_MODE, LC_ALL, LC_CTYPE, LANG, DYLD_FALLBACK_LIBRARY_PATH,
SAL_ENABLE_FILE_LOCKING, OPENOFFICE_MOZILLA_FIVE_HOME, MONO_ROOT,
MONO_CFG_DIR, MONO_CONFIG, MONO_DISABLE_SHM, JAVA_HOME]
Jim
Post by Anders ViklundHi,
Is it possible to set an environment variable (not java system properties) with groovy?
It should be visible with this code.
Thanks!!
def env = System.getenv()
for(k in env){
println(k)
}
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email