bash - 使用scala通过ssh远程发出命令的问题

标签 bash scala ssh scala-2.10

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

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

但是,当我运行时,例如

"ssh <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b1c4c2d4c3f1fcd0d8df9fddded2d0dd" rel="noreferrer noopener nofollow">[email protected]</a> 'mkdir Desktop/test'".!

我得到:bash: mkdir Desktop/test: 没有这样的文件或目录 res7: Int = 127

当我将命令复制粘贴到 shell 中时,它执行时没有任何问题。

有人知道这是怎么回事吗?

编辑:

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

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

谢谢!

最佳答案

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

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

"ssh <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7b0e081e093b361a1215551714181a17" rel="noreferrer noopener nofollow">[email protected]</a> 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", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9aefe9ffe8dad7fbf3f4b4f6f5f9fbf6" rel="noreferrer noopener nofollow">[email protected]</a>", "mkdir Desktop/test")).!
Process(Seq("ssh", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7207011700323f131b1c5c1e1d11131e" rel="noreferrer noopener nofollow">[email protected]</a>", "mkdir", "Desktop/test")).!

使用带有 SeqProcess.apply 形式可以消除参数之间边界的一层模糊性。但请注意,一旦命令到达远程主机,它将由远程 shell 处理,远程 shell 将自行决定将参数中断放在哪里。例如,如果您想创建一个名称中包含空格的目录,则可以在本地运行:

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

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

Process(Seq("ssh", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1762647265575a767e79397b7874767b" rel="noreferrer noopener nofollow">[email protected]</a>", "mkdir", "foo bar")).!

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

关于bash - 使用scala通过ssh远程发出命令的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942386/

相关文章:

linux - 通过HTTP代理的SSH隧道

c++ - 在 C++ 中使用 Perl + Regex 将#define 更改为#undef

string - shell bash,你能检查一个函数是否存在吗

linux - 如何简化 bash 中的重复重定向

bash - 为ssh获取短路

Scala 意外堆栈溢出

ssh - phpseclib和Synology NAS SCP失败

scala - 对于生产版本,是否有必要在 "clean"之前添加 "stage"SBT?

scala - 在 Scala 的构造函数中扩展具有隐式参数的类的惯用方法是什么?

google-app-engine - Google Instance ssh 使用 `gcompute` ,不同的用户名