如何在Shake中获取控制台输入的内部版本?

问题描述

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

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

但是,大概是由于Shake处理控制台输入/输出的方式,当sudo运行时,我实际上无法输入密码。我尝试将WithStderr False传递给cmd_,并将shakeLineBuffering=False设置为无效。

允许命令提示用户输入的正确方法是什么?如果不存在这样的事情,还有另一种好的方法来做类似的事情吗?

解决方法

您要查找的设置是InheritStdin,可确保将标准输入提供给该过程,因此您实际上可以输入密码。您可能还需要设置EchoStderrEchoStdout,以便看到密码提示。

或者,您不必使用cmd。在Shake内部,cmd已针对符合人体工程学的紧密集成运行命令进行了优化。但是,如果需要更多控制,使用默认的System.Process模块就足够了,例如:

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