如何为整个命令应用环境变量

How to apply an environment variable for the whole command

在我的 Bash 终端中,我定期执行一系列命令。例如:

cmd1 && cmd2 && cmd3

现在,我想定义一个环境变量,它应用于所有三个命令,并且仅作用于这些命令。我试过了:

MY_VAR=abc cmd1 && cmd2 && cmd3

不过现在好像只有cmd1看到MY_VAR.

有没有办法将环境变量应用于所有三个命令?我知道我可以提前 export,但我更喜欢以临时方式在本地声明环境变量,因此它永远不会影响后续命令。

重要的是,我正在使用 urxvt 作为终端仿真器。

重复:MY_VAR=abc cmd1 && MY_VAR=abc cmd2 && MY_VAR=abc cmd3

或者使用子shell:

   # wrapper subshell for the commands
   cmds () 
   {
      cmd1 && cmd2 && cmd3
   }

   # invoke it
   MY_VAR=abc cmds

如果您需要一次性输入全部内容,请执行:

   cmds() { cmd1 && cmd2 && cmd3; }; MY_VAR=abc cmds

你可以试试这个:

export MY_VAR="abc"
cmd1 && cmd2 && cmd3
unset MY_VAR          # only nessesary if you want to remove the variable again

方法是:

MY_VAR=abc; cmd1 && cmd2 && cmd3

不同之处在于赋值后的冒号。

没有冒号 ;MY_VAR=abc cmd1 && ... 这会导致赋值成为条件表达式 cmd1 element 的一部分。另一边的任何东西 逻辑与:&&看不到其他条件元素的本地环境。

我创建了一个简单的脚本来回显我的变量以尝试模拟一个命令。 还使用 export 命令声明了 1 "global environment variable"。

#!/bin/bash
echo $ABC

输入

$ export ABC=globalEnvironmentVariable
$ (ABC=localGroupVariable; ./test.sh && ./test.sh) && ABC=commandVariable ./test.sh && ./test.sh

输出

localGroupVariable
localGroupVariable
commandVariable
globalEnvironmentVariable