私がしたいこと:リダイレクトされていないすべての製品(URL)を探したい。Bash:最初のURLのみを出力するカールを使用してURLをループする
次のように私はcurl
コマンドを使用しているリダイレクト後の最終的なURLを取得するには:
curl -Ls -o /dev/null -w %{url_effective} "$URL"
これが正常に動作しています。今私は、リダイレクトされていないURLを取得し、それらをプログラムの出力として表示するために、URLを繰り返し処理したいと考えています。私は次のコードを持っています:
result=""
productIds=$1
for productId in $(echo $productIds | sed "s/,/ /g")
do
echo "Checking product: $productId";
URL="http://localhost/?go=$productId";
updatedURL=`curl -Ls -o /dev/null -w %{url_effective} "$URL"`
echo "URL : $URL, UpdatedUrl: $updatedURL";
if [ "$URL" == "$updatedURL" ]
then
result="$result$productId,";
fi
done
curlコマンドは最初の製品でのみ動作します。しかし、2番目から最後の製品までは、URL
とupdatedURL
はすべて同じです。私は理由を理解できないのですか? productId
は繰り返しごとに変化しているので、キャッシュに関連するものではないと私は思う。
また、私はまたcurl
次のバリエーションを試してみた:
updatedURL=$(curl -Ls -o /dev/null -w %{url_effective} "$URL")
updatedURL="$(curl -Ls -o /dev/null -w %{url_effective} "$URL")"
編集:デバッグモードと異なる方法の多くとしようとした後。私は手動でターミナルで次のようにヒットした場合、私は、パターン、すなわち気づい:
curl -Ls -o /dev/null -w %{url_effective} "http://localhost/?go=32123"
そして、シェルスクリプトでこれらのURLが正常に動作します。しかし、私が手動でヒットしなければ、curl
もシェルスクリプトを介してそれらの製品では動作しません。
どのように必要な場合は私に知らせてchanges.Doコードが必要ですつまり、 '$ 1' /' $ productIds'とは何ですか? –
'sh test.sh 123,456,789,221'は私がシェルスクリプトを呼び出すのに使っているものです。 '$ 1'は私がスクリプトの中でユーザー入力を得るために使っているものです。 –
'#!/ bin/bash -vx'を一番上の行に置き、test.shを実行可能にしてからtestを呼び出します。shを使わないsh - たくさんのデバッグ出力を与えて、URLの割り当てが動作するかどうかを確認してください。 –