lispでやってるのを見てscalaだとどんな感じになるのかな?と思って調べた
この辺を参照
https://stackoverflow.com/questions/30103040/interact-i-o-with-an-external-process-in-scala
https://github.com/scala/scala/blob/99a82be91cbb85239f70508f6695c6b21fd3558c/src/scaladoc/scala/tools/nsc/doc/html/page/diagram/DotRunner.scala
import java.io._
import scala.sys.process._
object Main extends App {
val procIO = new ProcessIO(inputFn(_), outputFn(_), outputFn(_))
val processBuilder = Process("/bin/bash")
val process = processBuilder.run(procIO)
private[this] def inputFn(stdin: OutputStream): Unit = {
val writer = new BufferedWriter(new OutputStreamWriter(stdin))
while (true) {
val in = io.StdIn.readLine()
writer.write(in + "\n")
writer.flush()
if (in == "exit") {
return
}
}
stdin.close()
}
private[this] def outputFn(stdOut: InputStream): Unit = {
val reader = new BufferedReader(new InputStreamReader(stdOut))
var line = reader.readLine
while (line != null) {
println(line)
line = reader.readLine
}
stdOut.close()
}
}
lispと違ってscalaだとあまり使う機会ないけどね〜
おまけ
val processBuilder = Process(Seq("/usr/local/bin/docker", "exec", "-i", <your docker container name>, "bash"))
こうすることでdocker execを実行することもできる