Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
在scala中执行cmd,在s3路径中使用空格char_Scala_Amazon S3 - Fatal编程技术网

在scala中执行cmd,在s3路径中使用空格char

在scala中执行cmd,在s3路径中使用空格char,scala,amazon-s3,Scala,Amazon S3,我希望使用以下命令在scala中执行shell cmds def executeShellCommand(cmd: String): Unit = { if (cmd.! != 0) { throw new RuntimeException(s"Error executing command '$cmd'") } } 我收到一个如下所示的cmd,它在s3路径中包含一个空格(来自发送方) 不幸的是,我在运行此cmd时出错 我相信如果我能把它转换成一个序列,cmd就会正常工作

我希望使用以下命令在scala中执行shell cmds

def executeShellCommand(cmd: String): Unit = {
   if (cmd.! != 0) {
     throw new RuntimeException(s"Error executing command '$cmd'")
   }
}
我收到一个如下所示的cmd,它在s3路径中包含一个空格(来自发送方)

不幸的是,我在运行此cmd时出错

我相信如果我能把它转换成一个序列,cmd就会正常工作

Seq("aws", "s3", "cp", "s3://external-bucket/From Sender/my-file.txt", "s3://my-bucket/dataset/my-file.txt").!
cmd字符串来自外部源,因此我无法轻松地将其转换为序列。我尝试过用引号括住s3存储桶路径,但也不起作用


你知道如何在scala中运行这个cmd吗?

好吧,shell之所以不能为你执行这个命令,是因为它不知道如何将它拆分为参数。因此,除非您有关于该命令的任何附加信息,可以用来修复它,否则您就倒霉了

如果您确实有其他信息,您可以尝试修复它,但是YMMV。例如,如果您知道参数列表始终是一组s3路径,则可以执行以下操作:

 cmd.split("(?=s3://)").flatMap { 
   case x if x.startsWith("s3://") => Seq(x.trim) 
   case x => x.split(" ")
 }.toSeq.!

谢谢你的建议。不幸的是,我发现用引号括起路径是行不通的。我知道的唯一解决办法是分裂成一个序列是的,对不起,我刚刚意识到。我更新了答案以显示如何拆分它。您确定修复该命令是您的工作吗?在我看来,提供这些命令的服务应该确保它们是有效的。例如,你能通过引用文件来修改cmd字符串吗?如果你能做到这一点,它应该很容易转换成一个序列。这是一个很好的观点,cmd的供应商发送了一个不正确的序列。不过,如果框架能够用转义引号处理s3路径的情况,那就太好了
 cmd.split("(?=s3://)").flatMap { 
   case x if x.startsWith("s3://") => Seq(x.trim) 
   case x => x.split(" ")
 }.toSeq.!