Issue
Running env
returns "Clear Workspace=true". How can I access it in bash? FYI, it's coming from a Jenkins Parameterized Build parameter name. ${Clear Workspace}
does not appear to work.
Also, how is Jenkins even able to create this environment variable? Running Clear Workspace=true
in bash obviously doesn't work as it tries to run the "Clear" command with an argument of "Workspace=true".
I could of course make the job parameter name Clear_Workspace, but it's presented in a form to the user, so I'd rather not. Also, the Maven Build Plugin for Jenkins has several parameter names with spaces in them, so it must be possible to access them somehow.
Solution
You can simulate this bit of fun with the env
command
env Clear\ Workspace=true bash
That will give you a shell with the environment variable set.
A hacky way, which should work up to bash 4.0, to get the environment variable value back out is:
declare -p Clear\ Workspace | sed -e "s/^declare -x Clear Workspace=\"//;s/\"$//"
Bash versions starting with 4.0 will instead return an error and are unable to extract such environment variables in that way.
Other than that you'd need to use either a native code program or a scripting language to pull it out, e.g.
ruby -e "puts ENV['Clear Workspace']"
Which is much less hacky... also if you don't have ruby
perl -e 'print "$ENV{\"Clear Workspace\"}\n";'
also
python -c 'import os; print os.environ["Clear Workspace"]'
And here is a native code version:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv, char **envp)
{
char **env;
char *target;
int len;
if (argc != 2)
{
printf("Syntax: %s name\n", argv[0]);
return 2;
}
len = strlen(argv[1]);
target = calloc(len+2,sizeof(char));
strncpy(target,argv[1],len+2);
target[len++] = '=';
target[len] = '0';
for (env = envp; *env != 0; env++)
{
char *thisEnv = *env;
if (strncmp(thisEnv,target,len)==0)
{
printf("%s\n",thisEnv+len);
return 0;
}
}
return 1;
}
Answered By - Stephen Connolly
Answer Checked By - Gilberto Lyons (JavaFixing Admin)