Передача команды с пробелами / специальными символами в Системную команду R - PullRequest
0 голосов
/ 31 января 2019

Я могу запустить эту команду в моей оболочке bash.Команда делает запрос к API для сжатия изображения и получает ответ от API без проблем:

curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\ \(abc\)/test/my/file.png --dump-header /dev/stdout

В сценарии R, когда я пытаюсь запустить ту же команду в R system( документы ), например:

system("curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\ \(abc\)/test/my/file.png --dump-header /dev/stdout", intern = T)

Я получаю сообщение об ошибке:

Error: '\(' is an unrecognized escape in character string starting "curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\ \("

У меня нет контроля надимя каталога, с пробелами и специальными символами, например, ( и ).

Как мне нужно изменить строку команды, переданную на system?Если это проблема с побегом персонажа, как мне кажется, то как бы я выполнил побег?

Спасибо

1 Ответ

0 голосов
/ 05 февраля 2019

Как и предполагал @ zx8754, экранирование escape-символов должно помочь.В частности, \ является экранирующим символом, в то время как такие вещи, как (, не нужно экранировать.Таким образом, экранирование \ должно помочь:

system("curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\\ \\(abc\\)/test/my/file.png --dump-header /dev/stdout", intern = T)

Следующее показывает, что R больше не недоволен чем-либо и правильно печатает строку:

cat("curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\\ \\(abc\\)/test/my/file.png --dump-header /dev/stdout")
# curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\ \(abc\)/test/my/file.png --dump-header /dev/stdout
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...