【问题标题】:How do I treat whitespace on SSH command sent via Scala/Java ProcessBuilder?如何处理通过 Scala/Java ProcessBuilder 发送的 SSH 命令上的空格?
【发布时间】:2016-01-26 00:32:51
【问题描述】:

Scala ProcessBuilder 使用底层的 Java ProcessBuilder,它有自己的空白处理例程,可以中断原本在 shell 上工作的 SSH 命令。我正在尝试获取 Perl 反引号和 system() 行为,其中解释器运行底层 shell 并执行 shell 命令。 Java/Scala 有类似的东西吗?

我正在尝试这个,具体来说:

ssh REMOTE_SERVER '/usr/bin/tail -n 25 /var/log/messages'

/usr/bin/tail 是命令的正确路径,请仔细检查。

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

提前感谢您的任何想法。

【问题讨论】:

  • Java ProcessBuilder 不会隐式使用 shell 来运行命令。如果要通过 PB 使用 shell 语法运行命令,则必须显式调用 shell。有关示例,请参见 stackoverflow.com/questions/3776195/…

标签: java linux scala shell ssh


【解决方案1】:

原来我需要将整个远程命令放入 Seq 的最后一个参数中,并希望 ProcessBuilder 猜到要使用的正确引号。

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

对如何处理最后一个参数的控制很少。无论如何,这行得通。如果有人知道一个更像 Perl 反引号或 system() 行为的库,我将不胜感激(如果它不是 100% 可移植的,这将只在 Linux 下运行)。谢谢。

【讨论】:

    猜你喜欢
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多