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

7
当我执行时

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

我原本期望能够将 Hello=123 环境变量传递给 a,b和c 进程。但事实证明只有 a 进程正确设置了环境变量。

是否有其他方法可以一次性传递参数?


1
你在使用哪个 shell?答案可能取决于它。 - pcarter
2个回答

9

尝试:

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

1
最后一个解决方案最干净,如果你想让它更加干净,可以将其用括号括起来,这样导出的变量只在需要时可用。 - ghoti
第一个可以工作。但是最后一个 Hello=123 污染了我的环境。 - Shih-Min Lee
同意,我也不喜欢环境杂乱。但是前面的评论提到用括号包裹可以解决这个问题。 - dgc

0

我只是使用 export

export FOO=bar && npm run a && npm run b && npm run c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接