Существует проект, чье подобие доли цели с PowerShell: Hotwire. Это комбинирует регулярный sh со сценариями Python и окном/графической средой. Вы могли посмотреть на него.
Это базируется вокруг объектно-ориентированного конвейера, который можно расширить с помощью собственных объектов путем обертывания существующих программ или пользования библиотеками Python.
Попробуйте эту конструкцию вместо этого:
while read author; do
curl "http://www.test.com/authors?string=$author&proc=39"
done < authors
Это сохранит Вас кошка, имея необходимость сделать вещи в обратных галочках, и т.д. Это также позволило бы Вам читать несколько столбцов из входного файла, если бы Вы хотели, но указывающий всего, что одна переменная для выборки как в моем примере получит целую строку.
авторы содержат имена как с пробелами, и я предполагаю точки
Несколько вещей, продолжающихся:
В первую очередь, путь Вы делаете for
цикл просто не работает. Попробуйте это:
for i in `cat authors`
do
echo "Author = \"$i\""
done
Посмотрите то, что продолжается? Каждый пробел разделяет значение для $i
. Если у Вас будет имя и фамилия, то Вы будете получать одну строку только с именем и одну строку только с фамилией.
Теперь попробуйте это:
cat authors | while read i
do
echo "Author = \"$i\""
done
Немного лучше? Теперь, $i
Ваша вся строка. (Да, я знаю о "бесполезной кошке", но вижу, куда я иду сюда!)
Второй из всех, Вам, вероятно, придется преобразовать те пробелы и периоды в допустимые символы URL. Пробелы должны быть преобразованы в %20
. Давайте проявим другой подход:
sed 's/ /%20/g' authors | while read test
do
echo "curl *line here* www.test.com/authors?string=$i&proc=39"
done
(Теперь, Вы видите, почему я имел cat
.)
Это должно распечатать Вашу вихревую команду. То, что я делаю, берет authors
файл и преобразование пробелов к строке %20
. Теперь, я могу избавиться от кавычек вокруг строки, которые также вызывают проблемы.
Таким образом мы можем теперь избавиться от эха и выполнить фактическую команду CURL:
sed 's/ /%20/g' authors | while read test
do
curl *line here* www.test.com/authors?string=$i&proc=39
done
Теперь, что делает *line here*
представить? Тот Ваш список опций? О, и у Вас были авторы вместо авторов в Вашей программе. Вы вводили его с опечаткой здесь, или это - способ, которым Ваша программа предполагает, чтобы быть?
${author}
включает пробелы или подобные символы, Вы захотите к URL, кодируют их, иначе можно найти, что Вы получаете ошибки какcode 400, message Bad request syntax ('GET /authors?string=shakespeare, w.&proc=39 HTTP/1.1')
с Вашего сервера HTTP. – Johnsyweb 11.05.2011, 22:20