如何在 Shake 构建过程中获取控制台输入?

How can I get console input mid-build in Shake?

由于各种不幸的原因,我的部分构建需要 root 权限。我正在尝试为此使用 sudo

cmd_ "sudo other_script.sh" [input] [output]

然而,大概是因为 Shake 如何处理控制台 input/output,我无法在 sudo 运行时实际输入密码。我试过将 WithStderr False 传递给 cmd_,以及设置 shakeLineBuffering=False,但都无济于事。

允许命令提示用户输入的正确方法是什么?如果不存在这样的事情,有没有其他好的方法可以做类似的事情?

您正在查找的设置是 InheritStdin,它确保向进程提供标准输入,因此您可以实际输入密码。您可能还需要设置 EchoStderrEchoStdout 以便您可以看到密码提示。

或者,您不必使用 cmd。在 Shake 中,cmd 针对 运行 命令的符合人体工程学的方式进行了优化,并紧密集成。但如果您需要更多控制,使用默认的 System.Process 模块也很容易,例如:

liftIO $ System.Process.system "sudo script input output"