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

标签 java linux scala shell ssh

Scala ProcessBuilder 使用底层的 Java ProcessBuilder,它有自己的空白处理例程,可以中断在 shell 上运行的 SSH 命令。我正在尝试获取解释器运行底层 shell 并执行 shell 命令的 Perl 反引号和 system() 行为。 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 反引号或 system() 行为,我将非常感激(如果它不是 100% 可移植也没问题,它只能在 Linux 下运行)。谢谢。

关于java - 如何处理通过 Scala/Java ProcessBuilder 发送的 SSH 命令上的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997336/

相关文章:

带有 isDefinedA 的 Scala PartialFunction 并应用不工作

java - 从 SCM checkout Maven 项目 : disconnect and merge

java - OpenCV java 上的图像识别

windows - 如何使用 Linux 或 Windows 上的浏览​​器作为我的 GUI

linux - Unix/Linux 管道是由生产者还是消费者驱动的?

linux - JVM 进程被 OS 杀死

java - 如何将包注释从 java 转换为 scala

Scala-当外部进程退出时获取回调

java - 了解 URLConnection 连接是否真的被合并?

java - 你如何测试一个 double 值是否等于 NaN?