【问题标题】:How can I iterate through lines of a remote file in shell using cURL?如何使用 cURL 在 shell 中遍历远程文件的行?
【发布时间】:2014-04-04 19:08:50
【问题描述】:

我了解如何遍历本地文件中的行。但是远程文件呢?

while read NAME
do
    echo "$NAME"
done < curl -sL 'http://mylistofnames.com/list.html

如果这是本地的,我会将最后一行替换为 done &lt; names.txt。我被困在遥控器上。

【问题讨论】:

    标签: bash shell curl


    【解决方案1】:

    将 curl 命令放入bash process substitution:

    while read NAME
    do
        echo "$NAME"
    done < <(curl -sL 'http://mylistofnames.com/list.html')
    

    管道也可以工作,但如果在 while 循环中设置了变量,并且在 while 循环范围之外需要它们,那么这个解决方案就变得必要了。

    【讨论】:

    • 你能帮我检查一下你的语法吗?管道确实有效,但我想在循环外访问循环内设置的变量。我正在尝试的变体不断出现意外的令牌错误。最新尝试:done &lt; $(curl -sL http://domain.com/list.html)
    • @Ryan 在进程替换之前你有一个额外的$。 $(...) 是命令替换。
    • 我知道,&lt; 出现了意外的令牌错误,所以我正在试验。无论哪种方式,它都不适合我。
    • 噢!我在顶部有#!/bin/sh,而不是#!/bin/bash。一切都好。再次感谢。
    【解决方案2】:

    管道输出:

    curl -sL 'http://mylistofnames.com/list.html' | while read NAME
        do echo "$NAME"
    done
    

    使用进程替换:

    while read NAME
        do echo "$NAME"
    done < <(curl -sL 'http://mylistofnames.com/list.html')
    

    【讨论】:

    • 管道工作。谢谢。虽然我现在希望让进程替换工作,所以我可以访问循环之外的变量。
    • 添加了进程替换版本
    • 有趣。所以这是正确的语法。但我不断收到syntax error near unexpected token
    • 您运行的是哪个版本的 bash?它可能没有进程替换。
    • 噢!我在顶部有#!/bin/sh,而不是#!/bin/bash。一切都好。再次感谢。
    猜你喜欢
    • 2016-11-26
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2018-07-14
    • 2012-03-24
    • 2016-02-10
    • 1970-01-01
    相关资源
    最近更新 更多