#shell
#оболочка
Вопрос:
Я должен написать скрипт, который генерирует и выполняет команду с переменным количеством аргументов, содержащих имена файлов. Эти имена файлов могут содержать пробелы, и все должно нормально работать с пробелами или без них.
Например, эта сгенерированная команда может выглядеть следующим образом :
curl --data-urlencode "js_code@/tmp/some folder/data.txt" http://www.someurl.com
Если я использую жестко запрограммированную команду и выполняю ее, все работает нормально, с пробелами и без пробелов. Однако, если я создаю текст команды в строковой переменной и выполняю содержимое строки, кажется, что команда не учитывает кавычки, используя только первую часть файла :
Сценарий (упрощенный, просто представьте, что командная строка создается с использованием сложных правил) :
#!/bin/sh
#prepare
command="curl --data-urlencode "param_value@/tmp/some folder/data.txt" www.someurl.com"
#execute
$command
Результаты :
$ ./test.sh
Warning: Couldn't read data from file ""param_value@/tmp/some", this makes an
Warning: empty POST.
curl: (6) Couldn't resolve host 'folder'
Я пробовал разные вещи, меняя стиль кавычек, используя такие вещи, как exec, но я не мог заставить это работать.
Любая помощь была бы оценена
Спасибо
Примечание: я должен добавить, что все это тестирование выполняется на Cygwin. Это может быть важно в отношении синтаксиса пути.
Комментарии:
1. @spicavigo уже пробовал это, но безрезультатно :/
2. можете ли вы заменить некоторые dbl-кавычки на одинарные кавычки?, т.е. command=»curl —data-urlencode ‘param_value@/tmp/some folder/data.txt ‘ www.someurl.com » … Удачи!
3. У меня просто есть динамический путь, в котором есть пробел, есть какое-либо средство для исправления этого?
Ответ №1:
Вы должны использовать eval :
eval "$command"
Комментарии:
1. Не повезло. Команда не работает, а потому, что она ищет curl в текущем каталоге, а не в каталоге bin. (говорит, что /home/Shtong /curl не существует)
Ответ №2:
Вы пробовали:
command='curl --data-urlencode "param_value@/tmp/some folder/data.txt" www.someurl.com'
Комментарии:
1. Я сделал, но, извините, те же результаты!
2. @Shtong: Я забыл убрать экранирование второй кавычки. Теперь изменил ее в своем коде.
3. О, не увидел вашей ошибки, но с ошибкой или без ошибки ошибка та же 🙂