2017-07-14 50 views
0

问题的大图:我正在创建Golang脚本(http://github.com/Droplr/aws-env),该脚本将用于保护检索环境变量并导出它们以用于其他进程。使用空格从脚本导出环境变量

正如我们所知,这是不容易做到的,因为脚本不能输出 [1],[2]之外的变量。

所以我们试图这样做的方式,基本上是outputing export statements,然后使用bash反引号来运行该命令。

最终用途是这样的:

`aws-env` && printenv 

其中printenv应该显示由评估AWS-ENV输出(其中包含 “出口” 报表)输出变量。与包含空格的/新线等

简化下划线代码变量

问题就出现了,这一个工程:

$ export A=b\ b 
$ printenv | grep A= 
A=b b 

这 - 不是:

$ `echo export A=b\ b` 
$ printenv | grep A= 
A=b 

我已经超过了其他Stackoverflow的讨论([3]),但找不到明确的答案(主要是答案是不使用反引号,但与我们的整体问题,我们试图解决它不会是那么容易......)

+0

在同一个shell。脚本的用法如下:\'aws-env \'&& printenv(printenv应显示由aws-env导出的env变量)。 aws-env只是输出“export ...”,然后应该通过反引号进行评估。 –

+0

只是为了再次确认您的要求? 'aws-env'有望做什么?它不清楚 – Inian

+0

不应该这样:https://github.com/Droplr/aws-env/blob/master/aws-env.go#L60是'fmt.Printf(“export%s ='%s' \ n“,env,value)'?请注意,在这种情况下,如果您的导出语句包含其他shell变量,则不会外推它们。 – favoretti

回答

0

如果我按照这个正确,AWS-ENV是要输出的东西像这样:

export A=b\ b 
export B=test 
export C=this\ is\ a\ test 

你想要在你的当前shell中执行那些命令吗?如果是的话,这应该工作:

. <(aws-env) 
printenv | egrep "^[ABC]="