Scala 使用“sudo”运行have sbt task launch子流程的安全方法`

Scala 使用“sudo”运行have sbt task launch子流程的安全方法`,scala,scripting,sbt,Scala,Scripting,Sbt,我正在用SBT编写一些DevOps脚本,我需要一个任务,通过sudo启动一个子流程,用户可以通过sudo提示符安全地键入密码。sbt中是否有一种方法允许子进程临时但完全捕获控制台的stdin,并通过密码击键传递到sudo 我没有在SBT中看到这一点,但我可以建议在sudoers列表中添加用户(或用户组)和命令,这样它就不会提示输入密码 我从SBT运行一些Docker任务时非常成功地做到了这一点 例如,在build.sbt中: docker := { (test in Test).value

我正在用SBT编写一些DevOps脚本,我需要一个任务,通过
sudo
启动一个子流程,用户可以通过
sudo
提示符安全地键入密码。sbt中是否有一种方法允许子进程临时但完全捕获控制台的
stdin
,并通过密码击键传递到
sudo

我没有在SBT中看到这一点,但我可以建议在sudoers列表中添加用户(或用户组)和命令,这样它就不会提示输入密码

我从SBT运行一些Docker任务时非常成功地做到了这一点

例如,在
build.sbt
中:

docker := {
  (test in Test).value
  (stage in Docker).value
  "./docker-stuff.sh" !
}
…然后
docker stuff.sh
sudo
命令。

简短回答 您可以在
build.sbt
build.scala
中使用以下代码:

import sbt.Process

val sudo = taskKey[Unit]("Executes commands with sudo!")

sudo := {
  Process("sudo ls /", new File(".")).!<
}

在这种情况下,将使用正在运行的Java进程的当前工作目录作为工作目录。

谢谢您的想法。不幸的是,在我的用例中,我不能强迫用户进行这样的系统更改。回答得很好!谢谢
sudo := "sudo ls /".!<