In my Bash terminal, I regularly execute a chain of commands. For example:
cmd1 && cmd2 && cmd3
Now, I want to define an environment variable which is applied to all three commands and which only scoped to those commands. I tried:
MY_VAR=abc cmd1 && cmd2 && cmd3
But it seems that now only cmd1 sees MY_VAR.
Is there a way to apply the environment variable to all three commands? I know I could export in advance, but I prefer to declare the environment variable locally in an ad-hoc fashion, so it will never impact subsequent commands.
It it matters, I am using urxvt as terminal emulator.
Repeat it: MY_VAR=abc cmd1 && MY_VAR=abc cmd2 && MY_VAR=abc cmd3
Or use a subshell:
   # wrapper subshell for the commands
   cmds () 
   {
      cmd1 && cmd2 && cmd3
   }
   # invoke it
   MY_VAR=abc cmds
If you need to enter the whole thing in one go, do:
   cmds() { cmd1 && cmd2 && cmd3; }; MY_VAR=abc cmds
                        The way to do it is:
MY_VAR=abc; cmd1 && cmd2 && cmd3
What makes the difference is the colon after the assignment.
Without the colon ;, MY_VAR=abc cmd1 && ... this cause the assignment to be part of the cmd1 element of the conditional expression. Anything at the other side of the 
logical AND: && can not see the local environment of the other condition elements.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With