执行从文件读取的curl命令

时间:2017-01-17 02:57:30

标签: linux bash shell curl

我有一个文本文件,其中包含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"

2 个答案:

答案 0 :(得分:4)

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

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

makingCurlCall=$(eval "$line")

makingCurlCall=$("$line")
如果字符串中包含的命令具有需要由shell解释的任何元字符,则

eval更合适。例如,><$

答案 1 :(得分:1)

尝试使用此略微修改的版本替换您的脚本

>>> test=bootstrapping(range(1,6))
>>> test.CI()
('Lower confidence:', 1.7676140938359097, 'Upper confidence:', 4.2427859061640962)
>>>  

所有#!/bin/sh IFS=$'\n' while read -r line do echo $line $line done < "data.txt" 都会将其参数输出到标准输出(这意味着在您的情况下在屏幕上显示它们)。

扩展变量(如上面的echo)实际上会将其作为命令执行。由于文件中的行已正确引用,因此应该可以正常工作。