如何处理通过Scala/Java ProcessBuilder发送的SSH命令上的空白?

如何处理通过Scala/Java ProcessBuilder发送的SSH命令上的空白?,java,linux,scala,shell,ssh,Java,Linux,Scala,Shell,Ssh,Scala ProcessBuilder使用底层Java ProcessBuilder,它有自己的空白处理例程,可以中断SSH命令,否则这些命令会在shell上工作。我试图获得Perl backticks和system()行为,其中解释器运行底层shell并执行shell命令。Java/Scala有类似的功能吗 我正在尝试这个,特别是: ssh REMOTE_SERVER '/usr/bin/tail -n 25 /var/log/messages' 其中/usr/bin/tail是命令的正确

Scala ProcessBuilder使用底层Java ProcessBuilder,它有自己的空白处理例程,可以中断SSH命令,否则这些命令会在shell上工作。我试图获得Perl backticks和system()行为,其中解释器运行底层shell并执行shell命令。Java/Scala有类似的功能吗

我正在尝试这个,特别是:

ssh REMOTE_SERVER '/usr/bin/tail -n 25 /var/log/messages'
其中/usr/bin/tail是命令的正确路径,请仔细检查它

从服务器获取最新的日志消息。它在shell上运行良好,但在没有此类文件或目录的ProcessBuilder上会中断。显然ProcessBuilder以某种方式引用或转义了该命令,并破坏了它


提前感谢您的建议。

结果表明,我需要将整个远程命令放入Seq的最后一个参数中,并希望ProcessBuilder能够猜出正确的引号

import scala.sys.process._
// .....
Seq("/usr/bin/ssh","REMOTE_HOST","/usr/bin/tail -n 25 /var/log/messages")

对于如何处理最后一个参数,几乎没有提供控制。无论如何,这是有效的。如果有人知道一个更像Perl backtick或system()行为的库,我会非常感激(如果它不是100%可移植的,那么没有问题,它将只在Linux下运行)。谢谢。

Java ProcessBuilder不会隐式使用shell来运行命令。如果希望通过PB使用shell语法运行命令,则必须显式调用shell。有关示例,请参见。