Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用scala通过ssh远程发出命令时出现问题_Bash_Scala_Ssh_Scala 2.10 - Fatal编程技术网

Bash 使用scala通过ssh远程发出命令时出现问题

Bash 使用scala通过ssh远程发出命令时出现问题,bash,scala,ssh,scala-2.10,Bash,Scala,Ssh,Scala 2.10,当我想通过ssh远程创建目录时,scala有一个问题 通过scala的ssh命令,如date或ls,工作正常 然而,当我跑步时,例如 "ssh user@Main.local 'mkdir Desktop/test'".! 我得到:bash:mkdir桌面/test:没有这样的文件或目录 res7:Int=127 当我将命令复制粘贴到shell中时,它会毫无问题地执行 有人知道发生了什么吗 编辑: 我发现这个帖子: 但是,我唯一能从中得到的是使用要创建的目录的完整路径。但是,它仍然不起作用:(

当我想通过ssh远程创建目录时,scala有一个问题

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

然而,当我跑步时,例如

"ssh user@Main.local 'mkdir Desktop/test'".!
我得到:
bash:mkdir桌面/test:没有这样的文件或目录
res7:Int=127

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

有人知道发生了什么吗

编辑:

我发现这个帖子:

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


谢谢!

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")).!
使用
Process.apply
的形式,它接受一个
Seq
消除了关于参数之间边界的一个模糊级别。但是请注意,一旦命令到达远程主机,它将由远程shell处理,远程shell将自行决定将参数放在何处。例如如果要创建名称中带有空格的目录,此操作在本地有效:

Process(Seq("mkdir", "foo bar")).!
但是如果你远程尝试同样的事情:

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

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

谢谢!我只在scala中对其进行了标记,因为单引号在我的纯bash脚本中起作用。因此我认为这是REPL的问题。感谢您清除了编辑:这可以被视为scala问题,因为它是作为一个小错误记录,我的原始答案错误地声称ssh要求命令参数作为单独的参数;这是只允许的,不是必需的。因此,如果SI-7947得到解决,您的原始命令就可以工作了,您是对的。我已经对我的答案进行了编辑,使其措辞更加狭隘。