【问题标题】:Execute curl commands read from a file执行从文件中读取的 curl 命令
【发布时间】:2017-01-17 02:57:29
【问题描述】:

我有一个文本文件,其中包含 curl 调用。它们都由换行符分隔,这有助于我相应地逐行读取文件。我的问题是我不确定如何触发 curl 调用来执行。现在它的行为是打印到屏幕上,就像它只是另一个字符串一样?

data.txt 示例:

curl -X GET "https://www.google.com"
curl -X GET "https://www.facebook.com"

我的脚本:

#!/bin/sh
IFS=$'\n'
while read -r line
do
    echo $line
    makingCurlCall=$(echo "$line")
    echo "$makingCurlCall"
done < "data.txt"

它只会给出行的输出,而不是实际进行 curl 调用。

输出:

curl -X GET "https://www.google.com"
curl -X GET "https://www.google.com"
curl -X GET "https://www.facebook.com"
curl -X GET "https://www.facebook.com"

【问题讨论】:

  • data.txt 似乎已经是您想要的脚本。只需执行它:bash data.txt.
  • 谢谢。同意,但是一旦我在另一个脚本中进行这些调用,我将使用 SED 进行一些卫生处理。
  • @chepner 是唯一理解这个问题的人 XD。感谢您的解决方案!

标签: linux bash shell curl


【解决方案1】:

您没有执行包含在从输入文件读取的行中的curl 命令。你可以通过改变这一行来做到这一点:

makingCurlCall=$(echo "$line") => this simply displays the command and not execute it

makingCurlCall=$(eval "$line")

makingCurlCall=$("$line")

eval 如果包含在字符串中的命令具有任何需要由 shell 解释的元字符,则更合适。例如,&gt;&lt;$

【讨论】:

    【解决方案2】:

    尝试用这个稍作修改的版本替换您的脚本

    #!/bin/sh
    IFS=$'\n'
    while read -r line
    do
        echo $line
        $line
    done < "data.txt"
    

    echo 所做的只是将其参数输出到标准输出(这意味着在您的情况下将它们显示在屏幕上)。

    扩展变量(如上面的$line)实际上会将其作为命令执行。因为文件中的行被正确引用,所以它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      相关资源
      最近更新 更多