Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to apply an environment variable for the whole command

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.

like image 222
Koller Avatar asked Oct 31 '25 05:10

Koller


2 Answers

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
like image 179
user268396 Avatar answered Nov 02 '25 20:11

user268396


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.

like image 44
Léa Gris Avatar answered Nov 02 '25 19:11

Léa Gris



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!