Bash:使用curl循环网址,只提供第一个网址输出

时间:2016-05-20 11:13:53

标签: bash shell url curl

我想做什么:我想找到所有未重定向的产品(网址)。

要在重定向后获取最终URL,我使用curl命令,如下所示:

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个到最后一个产品,URLupdatedURL都是相同的。我无法理解原因? 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"

然后在shell脚本中这些网址将正常工作。但是,如果我没有手动点击,那么curl也不能通过shell脚本为这些产品工作。

2 个答案:

答案 0 :(得分:1)

只需将#!/bin/bash添加为shell的第一行。它确实产生了所需的输出。现在调用应该像 bash file.sh 123,456,789,221 shell and its output

通过Bourne shell调用 sh file.sh 123,456,789,221 确实需要更改代码。如果您需要,请告诉我们。)

答案 1 :(得分:0)

我建议将你的循环更改为:

System>Advanced  System Settings>Environment Variables
Click new

Variable name  : path
Variable value : c:\wamp\bin\php\php5.3.13\


Click ok

这会将传递给脚本的第一个参数拆分为数组,并使用逗号作为分隔符。重定向的数量存储在变量中。当数字为零时,将打印消息。

我不得不承认,我看不出任何与原始方法本身有任何差异的东西,所以有可能会发生一些我们不知道的额外事情。如果您能提供可重复的测试用例,那么我们将能够更有效地帮助您。