在不同环境下重复运行命令

在不同环境下重复运行命令

假设我想foo使用不同的变量集运行该流程,例如:

FOO=1 foo
FOO=2 foo
FOO=1 BAR=7 foo

如何在不重复执行foo命令的情况下做到这一点?例如,通过循环设置环境,例如:

for e in 'FOO=1' 'FOO=2' 'FOO=1 BAR=7'; do
  env "$e" foo
done

$e这几乎有效,除了在equal to 的情况下FOO=1 BAR=1FOO被设置为1 BAR=1并且BAR根本没有被设置,因为env看到一个参数。我可以使用env $e, ie,不加引号e- 但如果变量值有空格,它就不起作用。

答案1

你不会变得更矮。如果问题是您要运行的命令很长,您可以编写一个辅助函数,例如

r(){ env "$@" foo with lots of args ; }
r FOO=1
r FOO=2
r FOO=1 BAR=7
r FOO='1 BAR=7'

如果您知道某个字符不会出现在环境变量的名称或值中,您可以使用它来分割,或者您可以尝试正确引用这些值并使用eval.

问题是你为什么要这样做?

相关内容