Groovy скрипт проблема с экранированием кавычек - PullRequest
0 голосов
/ 15 апреля 2019

Я запускаю эту команду оболочки, используя groovy (которая работала в bash):

aws --profile profileName --region us-east-1 dynamodb update-item --table-name tableName --key '{"group_name": {"S": "group_1"}}' --attribute-updates '{"attr1": {"Value": {"S": "STOP"},"Action": "PUT"}}'

Это обновляет значение элемента до STOP в DynamoDB.В моем скрипте groovy я запускаю эту команду следующим образом:

String command = "aws --profile profileName --region us-east-1 dynamodb update-item --table-name tableName --key '{\"group_name\": {\"S\": \"group_1\"}}' --attribute-updates '{\"attr1\": {\"Value\": {\"S\": \"STOP\"},\"Action\": \"PUT\"}}'"
println(command.execute().text)

Когда я запускаю это с groovy afile.groovy, ничего не распечатывается, а когда я проверяю таблицу в DynamoDB, она не обновляется до STOP.Что-то не так с тем, как я избегаю цитаты, но я не уверен, что.Был бы признателен за любые идеи.

Sidenote: Когда я выполняю простую команду aws, такую ​​как aws s3 ls, она работает и печатает результаты, поэтому это что-то с этой конкретной командой, которая ее отбрасывает.

1 Ответ

2 голосов
/ 15 апреля 2019

Вы не цитируете groovy (и базовый exec) - вам придется цитировать свою оболочку. execute() в строке не работает как оболочка - нижележащий код просто разделяется на пробел - любые кавычки просто передаются как часть аргумента.

Используйте ["aws", "--profile", profile, ..., "--key", '{"group_name": ...', ...].execute() и игнорируйте любые цитаты.

И вместо того, чтобы объединять строки для создания JSON, используйте groovy.json.JsonOutput.toJson([group_name: [S: "group_1"]])

...