Bash скрипт для скачивания файлов с помощью Curl - PullRequest
4 голосов
/ 18 сентября 2009

Я пытаюсь собрать небольшой пакетный скрипт для загрузки файлов, который принимает URL-адрес в качестве первого параметра и локальное имя файла в качестве второго параметра. В ходе тестирования я узнал, что он срабатывает из-за пробелов в выходном имени файла, поэтому я попытался использовать sed, чтобы избежать их, но он не работает.

#!/bin/bash
clear
echo Downloading $1
echo
filename=`sed -e "s/ /\\\ /g" $2`
echo $filename
echo eval curl -# -C - -o $filename $1

но я получаю сообщение

sed: outfile.txt: Нет такого файла или каталога

, в котором предлагается попытаться загрузить выходной файл в качестве входного для sed вместо обработки выходного имени файла как строкового литерала.

Какой будет правильный синтаксис здесь?

Ответы [ 4 ]

5 голосов
/ 18 сентября 2009

цитирование аргументов правильно, вместо преобразования их может быть лучшим подходом

Вполне нормально ожидать, что в аргументах сценариев оболочки нужно заключать в кавычки пробелы

, например

#!/bin/bash
clear
echo Downloading $1
echo `curl -# -C - -o "${2}" "${1}"`

называется так

./myscript http://www.foo.com "my file"

альтернативно, избегайте пробелов с '\', как вы их называете

./myscript http://www.example.com my\ other\ filename\ with\ spaces
4 голосов
/ 18 сентября 2009

Я согласен с cms. Правильное цитирование входных аргументов - намного лучший стиль. Что вы будете делать со следующим символом проблемы? Следующее намного лучше.

curl -# -C - -o "$2" $1

Однако я ненавижу людей, которые не отвечают на заданный вопрос, поэтому вот ответ: -)

#!/bin/bash
clear
echo Downloading $1
echo
filename=`echo $2 | sed -e "s/ /\\\ /g"`
echo $filename
echo eval curl -# -C - -o $filename $1
2 голосов
/ 18 сентября 2009
curl -# -C - -o "$2" $1
0 голосов
/ 18 сентября 2009

, если $2 - текстовый ввод, попробуйте

echo $2 | sed 's: :\\\ :g '

Я обычно избегаю обратной косой черты в разделителях sed, поскольку они довольно запутанные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...