如何使用Shake分配PTY?

How to allocate PTY using Shake?

我正在尝试从我的构建脚本中以交互方式运行命令:

#!/usr/bin/env stack
{- stack
script
--resolver lts-18.8
--ghc-options -Wall
-}
import Development.Shake

main :: IO ()
main = shakeArgs shakeOptions $ do
  phony "cfg" $ do
    command_ [] "vim" []

但是不行。我想我需要分配一个终端才能 运行 vim 交互。我该怎么做?

运行ning 命令(commandcmd 等)的 Shake 函数专为 运行 无需用户交互的批处理命令而设计。虽然您可以做一些事情来使它们与 Vim(例如 InheritStdin)之类的东西更兼容,但 Shake 的某些方面可能会使事情变得更难(例如捕获 stderr,这可能会导致内存泄漏)。

令人高兴的是,Shake 可以和 System.Process 中的函数一起工作,所以不用调用 command 你可以写:

liftIO $ System.Process.createProcess $ System.Process.shell "vim"

createProcess记录了许多类型的进程相关设置,因此可以自定义以使Vim工作。