在一行中将相同的环境变量传递给两个进程

Pass the same environment variable to two processes in one line

有没有办法将环境变量传递给 bash 中一行启动的两个进程?我想在同一个命令行中执行两个进程

# these are ways to execute two processes in the same line
exec1 & exec2
exec1 && exec2
exec1 || exec2
exec1; exec2

这是将环境变量传递给进程的方法:

VAR=value exec

如何将两者结合起来?

# this is not enough because exec2 does not see VAR
VAR=value exec1 & exec2

我知道 export 的方法:

export VAR=value; exec1 & exec2; unset EXPORT

有没有另一种不导出的方法?

是的,您可以这样做:将导出范围限定为子shell。 (如果您然后 exec 来自子 shell 的进程之一,您不会在到达该行的分支中损失效率,因为 fork 用于生成子shell 与否则将进入 运行 子流程的那个相同)。因此:

(export VAR=value; exec1 & exec exec2)
(export VAR=value; exec1 && exec exec2)
(export VAR=value; exec1 || exec exec2)
(export VAR=value; exec1; exec exec2)

显然,如果您的命令实际上不是外部命令而是 shell 内置命令,这将产生不良副作用。


不过,我的建议呢?不。这使您的代码的可读性降低,收益非常小。在这种情况下,重复自己并不是世界末日。

这可能会因为引用地狱而变得混乱:将命令分组以在子 shell 中调用

VAR=value sh -c 'exec1 & exec2'