Выполнить cmd в scala с пробелом в пути s3 - PullRequest
1 голос
/ 22 января 2020

I wi sh для выполнения команд оболочки в scala, используя следующее

def executeShellCommand(cmd: String): Unit = {
   if (cmd.! != 0) {
     throw new RuntimeException(s"Error executing command '$cmd'")
   }
}

Я получаю cmd, например следующий, который содержит пробел в пути s3 (от отправителя)

"aws s3 cp s3://external-bucket/From Sender/my-file.txt s3://my-bucket/my-file.txt"

К сожалению, я получаю сообщение об ошибке при запуске этого cmd.

Я считаю, что если бы я мог преобразовать это в последовательность, cmd будет работать правильно

Seq("aws", "s3", "cp", "s3://external-bucket/From Sender/my-file.txt", "s3://my-bucket/dataset/my-file.txt").!

Строка cmd поступает из внешнего источника, поэтому я не могу легко преобразовать ее в последовательность. Я попытался заключить путь к корзине s3 в кавычки, но это тоже не сработало.

Есть идеи, как запустить этот cmd в scala?

1 Ответ

1 голос
/ 22 января 2020

Итак, оболочка не может выполнить эту команду за вас, потому что она не знает, как разбить ее на аргументы. Поэтому, если у вас нет дополнительной информации о команде, которую вы можете использовать для ее исправления, вам не повезло.

Если у вас есть дополнительная информация, вы можете попытаться исправить ее, но YMMV. Например, если вы знаете, что список аргументов всегда представляет собой набор путей s3, вы можете сделать что-то вроде этого:

 cmd.split("(?=s3://)").flatMap { 
   case x if x.startsWith("s3://") => Seq(x.trim) 
   case x => x.split(" ")
 }.toSeq.!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...