3

У меня есть файл, который имеет строки, которые выглядят так:

"http://api.domain.com/path/to/resource?format=json" > output.xml

и я выполняю следующее из моей командной строки:

cat file | xargs -L 1 -I {} wget {}

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

cat file | xargs -L 1 -I {} echo {}

Он печатает строки файла без двойных кавычек. Я думаю, что это может быть источником проблемы. Как мне их включить?

Как правильно выполнить команду wget ?

1 ответ1

1

Кавычки, операторы перенаправления и т.д. Обычно анализируются вашей оболочкой перед созданием массива argv []. > снят; оболочка выполняет перенаправление. Цитаты убраны; оболочка выполняет разбиение слов.

При использовании xargs вся строка ввода переходит непосредственно в argv [], а кавычки и операторы передаются в wget, который не знает, что с ними делать.

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


< file xargs -d '\n' -I {} sh -x -c "wget {}"

Таким образом, file читается построчно, не позволяя xargs выполнять какое-либо разбиение (-d '\n'), и передается в оболочку sh как часть командной строки. Опция -x для sh позволяет вам видеть команды, которые он выполняет.


while read -r line; do
    eval "wget $line"
done < file

Здесь то же самое делается с использованием только встроенных функций текущей оболочки - sh, bash или совместимых.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .