使用 shake 构建系统处理对 shell 环境的影响

Handling effects on the shell environment with the shake build system

我在 运行ning bash windows(不是 windows 10 上的奇特新事物,mingw bash)并从那里 shake。据我了解,windows 上的命令可以编辑 cmd 的环境。在我的用例中,我不想假设环境将如何改变,我只想在那个改变的环境中下一个命令 运行 。这可能吗?

理想的场景应该是这样的

(Environment env, Stdout out) <- cmd Shell (Cwd dir) "path/to/script.cmd" [arg1] [arg2]
-- Do stuff with out
cmd Shell (Cwd dir) (Env env) "env/dependent/command.cmd"

我也很高兴 运行在同一个 shell 中同时执行这两个命令,即使这意味着我不能 Do stuff with out 但我不知道该怎么做做那个

我想在 makefile 术语中我想要的类似于 .ONESHELL:

Shake 中的每个 cmd 调用都是独立的,因此任何环境变量都不会持续存在。假设你想把 script.cmd 当作一个黑盒子,有两种选择:

  1. 运行 两个命令一步到位。类似于:Stdout out <- cmd Shell (Cwd dir) "path/to/script.cmd" arg1 arg2 "&& env/dependent/command.cmd".
  2. 从第一个命令捕获环境并将其传递给第二个。您可以通过 运行 path/to/script.cmd .... && set 捕获环境,使用 Stdout 捕获环境,解析它,然后使用 Env.
  3. 提供它

如果您想多次重复使用 Env 那么第二次可能更快,但两者都应该有效。

第二种方法的有效实现,包括 set 输出解析器,可用 here (by @fakedrake)