问题描述
由于各种不幸的原因,我的构建的一部分需要root特权。我正在尝试使用sudo
:
cmd_ "sudo other_script.sh" [input] [output]
但是,大概是由于Shake处理控制台输入/输出的方式,当sudo
运行时,我实际上无法输入密码。我尝试将WithStderr False
传递给cmd_
,并将shakeLineBuffering=False
设置为无效。
允许命令提示用户输入的正确方法是什么?如果不存在这样的事情,还有另一种好的方法来做类似的事情吗?
解决方法
您要查找的设置是InheritStdin
,可确保将标准输入提供给该过程,因此您实际上可以输入密码。您可能还需要设置EchoStderr
或EchoStdout
,以便看到密码提示。
或者,您不必使用cmd
。在Shake内部,cmd
已针对符合人体工程学的紧密集成运行命令进行了优化。但是,如果需要更多控制,使用默认的System.Process
模块就足够了,例如:
liftIO $ System.Process.system "sudo script input output"