如何灵活地重定向任务中的输出

问题描述

如果我在灵活的文件中有此任务:

task readme,"generate README.md":
  exec "nim c -r readme.nim > README.md"

与此readme.nim

echo "# Hello\nworld"

使用灵活(nimble readme)执行任务不会将readme.nim的输出重定向文件。 如预期的那样,从终端运行nim c -r readme.nim > README.md可以正确创建/更新README.md

这是故意的行为吗?有解决方法吗?

注释:以上内容已在Windows上进行了测试。

解决方法

感谢@xbello的回答并随后进行了讨论,我为我的用例找到了一个很好的解决方法:

task readme,"generate README.md":
  exec "nim c readme.nim"
  "README.md".writeFile(staticExec("readme"))

为什么简单的exec与以下事实有关的解释:灵活使用nimscript.exec,内部使用rawExec是内置的(根据此处针对Windows报告的不同行为进行判断)和linux)在考虑输出管道时并不是完全跨平台的。

,

我最终得到了预期的README.md:

$ cat README.md
# Hello
world

但是有时候(readme.nim必须被编译或重新编译)我最终会遇到这样的事情:

CC: readme.nim
# Hello
world

也就是说,nim c -r readme.nim命令的完整标准输出(不是标准错误)。作为解决方法,您可以将要执行的操作封装在readme.nim中:

import os

let f: File = open(commandLineParams()[0],fmWrite)
f.write "# Hello\nworld"
f.close()

在您的灵活文件中:

task readme,"generate README.md":         
  exec "nim c -r readme.nim README.md"

另一种解决方法可能是禁止输出nim c

task readme,"generate README.md":
  exec "nim c --verbosity:0 -r readme.nim > README.md"