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/