有没有办法获取早期管道化Scala进程(#|)的退出代码?

有没有办法获取早期管道化Scala进程(#|)的退出代码?,scala,process,pipe,exit-code,Scala,Process,Pipe,Exit Code,我试图使用scala的sys.process库来传递命令,但我注意到|将返回最终进程的退出代码。我在管道中前面的命令失败了,但是最后一个命令的退出代码是0,因为它没有出错 我想知道scala是否有办法检查/检索管道(#|)中以前的命令是否失败 导入scala.sys.process_ val p1=(“false”|“true”).run() 断言(p1.exitValue==1) Bash有set-o pipefail,它将传递管道的非零出口代码,但它似乎有点“黑”: val p2=Seq(

我试图使用scala的sys.process库来传递命令,但我注意到
|
将返回最终进程的退出代码。我在管道中前面的命令失败了,但是最后一个命令的退出代码是0,因为它没有出错

我想知道scala是否有办法检查/检索管道(#|)中以前的命令是否失败

导入scala.sys.process_
val p1=(“false”|“true”).run()
断言(p1.exitValue==1)
Bash有
set-o pipefail
,它将传递管道的非零出口代码,但它似乎有点“黑”:

val p2=Seq(“/bin/bash”、“-c”、“set-o pipefail&&false | true”).run()
断言(p2.exitValue==1)
我希望有更好的办法

谢谢,我非常感谢您的帮助:)

运算符对非零退出代码抛出异常,因此可能只有在成功时才可以使用它通过运算符将一个进程的输出传递到另一个进程的输入流。如果我们定义自定义运算符
#|
  implicit class Pipefail[T](p1: T) {
    def #|<(p2: T)(implicit ev: T => ProcessBuilder): ProcessBuilder =
      Try(p1.!!).map(result => (p2 #< new ByteArrayInputStream(result.getBytes))).get
  }
("false" #|< "true").run
java.lang.RuntimeException: Nonzero exit value: 1
("echo Beam Me Up, Scotty" #|< "tr a-z A-Z" #|< "grep -o SCOTTY" ).run