web-dev-qa-db-ja.com

curlを使用してURLをループするシェルスクリプト

.txtファイルからクエリのリストを取得し、メインのurl変数を追加し、コンテンツをスクレイプしてテキストファイルに出力する単純なスクリプトを作成しようとしています。

ここに私が持っているものがあります:

#!/bin/bash

url="example.com/?q="
for i in $(cat query.txt); do
    content=$(curl -o $url $i)
    echo $url $i
    echo $content >> output.txt
done

リスト:

images
news
stuff
other

エラーログ:

curl: (6) Could not resolve Host: other; nodename nor servname provided, or not known
example.com/?q= other

このコマンドをコマンドラインから直接使用すると、出力がファイルに追加されます。

curl -L http://example.com/?q=other >> output.txt

最終的には、出力を次のようにします。

fetched:    http://example.com/?q=other
content:    the output of the page

followed by the next query in the list.
21
Mena Ortega

より多くの引用符を使用してください!

代わりにこれを試してください:

url="example.com/?q="
for i in $(cat query.txt); do
    content="$(curl -s "$url/$i")"
    echo "$content" >> output.txt
done
26
Gilles Quenot

ネストされた引用符があります。次のようなものを試してください。

#!/bin/bash

url=https://www.google.fr/?q=
while read query
do
    content=$(curl "{$url}${query}")
    echo $query
    echo $content >> output.txt
done < query.txt
4
David George