在一行中将相同的环境变量传递给两个进程
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'
有没有办法将环境变量传递给 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'