将环境变量传递给多个命令
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
。这是正确的。解决方案是为依次运行foo
和bar
的命令设置环境:sh -c
。
当然,另一种解决方案很简单:
Hello=123; export Hello # or export Hello=123 if using bash
npm run a && npm run b && npm run c
【讨论】:
最后一个解决方案是最干净的,如果您希望它更干净,请将其包裹在括号中,以便导出的变量仅在需要的地方可用。 第一个可以工作。最后一个Hello=123
污染了我的环境。
同意,我也不喜欢环境混乱。但是之前关于用括号括起来的评论解决了这个问题。以上是关于将环境变量传递给多个命令的主要内容,如果未能解决你的问题,请参考以下文章