【问题标题】:Problems using scala to remotely issue commands via ssh使用 scala 通过 ssh 远程发出命令的问题
【发布时间】:2013-11-14 02:26:53
【问题描述】:

当我想通过 ssh 远程创建目录时,我遇到了 scala 问题。

通过 scala 的 ssh 命令,例如 date 或 ls,可以正常工作。

但是,当我运行例如

"ssh user@Main.local 'mkdir Desktop/test'".!

我得到:bash: mkdir Desktop/test: No such file or directory res7: Int = 127

当我将命令复制粘贴到我的 shell 中时,它会毫无问题地执行。

有人知道怎么回事吗?

编辑:

我找到了这篇文章:sbt (Scala) via SSH results in command not found, but works if I do it myself

但是,我唯一能从中得到的就是使用要创建的目录的完整路径。但是,它仍然不起作用:(

谢谢!

【问题讨论】:

    标签: bash scala ssh scala-2.10


    【解决方案1】:

    ssh 不需要您将要运行的整个命令行作为单个参数传递。您可以向它传递多个参数,一个用于您要运行的命令,另一个用于您要传递该命令的任何参数。

    所以,这应该可以正常工作,没有单引号:

    "ssh user@Main.local mkdir Desktop/test"
    

    这显示了如何在普通 bash shell 中获得相同的错误消息,而不涉及 ssh 或 Scala:

    bash-3.2$ ls -d Desktop
    Desktop
    bash-3.2$ 'mkdir Desktop/test'
    bash: mkdir Desktop/test: No such file or directory
    bash-3.2$ mkdir Desktop/test
    bash-3.2$ 
    

    为了您的娱乐,还请注意:

    bash-3.2$ mkdir 'mkdir Desktop'
    bash-3.2$ echo echo foo > 'mkdir Desktop'/test
    bash-3.2$ chmod +x 'mkdir Desktop'/test
    bash-3.2$ 'mkdir Desktop/test'
    foo
    

    更新:

    请注意,这两种方法也都有效:

    Process(Seq("ssh", "user@Main.local", "mkdir Desktop/test")).!
    Process(Seq("ssh", "user@Main.local", "mkdir", "Desktop/test")).!
    

    使用带有SeqProcess.apply 的形式消除了关于参数之间边界所在位置的一层歧义。但请注意,一旦命令到达远程主机,它将由远程 shell 处理,远程 shell 将自行决定将参数中断的位置。因此,例如,如果您想创建一个名称中带有空格的目录,则可以在本地使用:

    Process(Seq("mkdir", "foo bar")).!
    

    但如果你远程尝试同样的事情:

    Process(Seq("ssh", "user@Main.local", "mkdir", "foo bar")).!
    

    您将获得两个名为 foobar 的目录,因为远程 shell 插入了一个参数中断。

    【讨论】:

    • 谢谢!我只在 scala 中标记它,因为单引号在我的纯 bash 脚本中工作。所以我认为这是 REPL 的问题。感谢您清除它编辑:这可以看作是一个scala问题,因为它被记录为一个小错误issues.scala-lang.org/browse/SI-7947
    • 我原来的答案错误地声称 ssh requires 命令参数是单独的参数;它只是允许,而不是必需。所以你是对的,如果 SI-7947​​ 得到解决,你原来的命令就会起作用。我已经编辑了我的答案,使其措辞更窄。
    猜你喜欢
    • 2016-12-16
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多