Discussion:
[groovy-user] Setting environment variables in groovy script
Anders Viklund
2008-12-04 18:06:55 UTC
Permalink
Hi,

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)
}




_________________________________________________________________
News, entertainment and everything you care about at Live.com. Get it now!
http://www.live.com/getstarted.aspx
Jim White
2008-12-05 08:08:43 UTC
Permalink
Groovy 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.

Here's something I posted previously for that:

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
little example prompts me to show this:

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 Viklund
Hi,
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
Jim White
2008-12-05 08:32:41 UTC
Permalink
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 White
Groovy 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 Viklund
Hi,
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

Loading...