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

时间:2016-05-05 14:25:38

标签: haskell shake-build-system

我在Windows上运行bash(不是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:

类似

1 个答案:

答案 0 :(得分:1)

Shake中的每个posts[ ->broadmatch {object1{name, id}, object2{name, id}...} ->wikipedia [object1{name, id}, object2{name, id}...] ]调用都是独立的,因此任何环境变量都不会持久存在。假设您想将cmd视为黑盒子,有两种选择:

  1. 只需一步即可运行这两个命令。类似于:script.cmd
  2. 从第一个命令捕获环境并将其传递给第二个命令。您可以通过运行Stdout out <- cmd Shell (Cwd dir) "path/to/script.cmd" arg1 arg2 "&& env/dependent/command.cmd"捕获环境,使用path/to/script.cmd .... && set捕获它,解析它,然后使用Stdout提供环境。
  3. 如果您想多次重复使用Env,那么第二个可能会更快,但两者都应该有效。

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