将环境变量传递给多个命令

Posted

技术标签:

【中文标题】将环境变量传递给多个命令【英文标题】:Pass environment variable to multiple commands 【发布时间】:2018-02-09 20:10:43 【问题描述】:

当我这样做时

Hello=123 npm run a && npm run b && npm run c

我期待Hello=123 环境变量在a, b and c 进程中传递。但事实证明只有a 正确设置了环境变量。

还有其他方法可以一次传递所有参数吗?

【问题讨论】:

您使用的是哪个外壳?答案可能取决于此。 Setting an environment variable before a command in bash not working for second command in a pipe的可能重复 【参考方案1】:

试试:

Hello=123 sh -c 'npm run a && npm run b && npm run c'

更好:在整行之前使用env。这使得单行代码可以在 Bourne/POSIX 和 csh 派生的 shell 中工作:

env Hello=123 sh -c 'npm run a && npm run b && npm run c'

您的观察是var=val foo && bar 仅在foo 的环境中设置$var,而不是bar。这是正确的。解决方案是为依次运行foobar 的命令设置环境:sh -c

当然,另一种解决方案很简单:

Hello=123; export Hello   # or export Hello=123 if using bash
npm run a && npm run b && npm run c

【讨论】:

最后一个解决方案是最干净的,如果您希望它更干净,请将其包裹在括号中,以便导出的变量仅在需要的地方可用。 第一个可以工作。最后一个Hello=123 污染了我的环境。 同意,我也不喜欢环境混乱。但是之前关于用括号括起来的评论解决了这个问题。

以上是关于将环境变量传递给多个命令的主要内容,如果未能解决你的问题,请参考以下文章

将环境变量传递给 XCUITest

无法将环境变量传递给 docker

将预处理器变量传递给 nmake 构建环境

使用 Docker 将环境变量传递给 Spring Boot 应用程序不起作用

SSH 从本地文件运行命令并传递本地环境变量

将环境变量传递给 application.yml