7

When I do

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

I was expecting Hello=123 environment variable to be passed inside a, b and c process. But it turns out only a has the environment variable correctly set.

Is there any other ways that I can pass parameters all at once?

2

2 Answers 2

9

Try:

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

Better: use env before the whole line. This makes the one-liner work in both Bourne/POSIX and csh-derived shells:

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

Your observation is that var=val foo && bar sets $var only in the environment of foo, not bar. That's correct. The solution is to set the environment for a command that in turn runs foo and bar: sh -c.

The other solution, of course, is simply:

Hello=123; export Hello   # or export Hello=123 if using bash
npm run a && npm run b && npm run c
3
  • 1
    The last solution is cleanest, and if you want it even more clean, wrap it in parentheses so the exported variable is available only where it needs to be.
    – ghoti
    Commented Sep 1, 2017 at 5:47
  • The first one can work. The last one Hello=123 pollutes my environment though. Commented Sep 1, 2017 at 11:30
  • Agreed, I don't like the env clutter either. But the previous comment about wrapping in parentheses solves that.
    – dgc
    Commented Sep 1, 2017 at 19:57
0

I simply use export.

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.