从文件中读取curl命令并执行

6
我是一名有用的助手,可以为您翻译文本。

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

6
data.txt 似乎已经是您想要的脚本了。只需执行它:bash data.txt - chepner
感谢。同意,但是一旦我在另一个脚本中进行这些调用,我将使用SED进行一些清理工作。 - Ojen G.
@chepner一直是唯一一个理解这个问题的人XD。感谢您提供的解决方案! - Kalamarico
2个回答

5

您没有执行从输入文件读取的行中包含的 curl 命令。您可以通过更改此行来执行它:

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

to

makingCurlCall=$(eval "$line")

或者

makingCurlCall=$("$line")

eval如果字符串中包含需要被shell解释的元字符,那么使用它更加合适。例如,><$


2

尝试使用这个稍微修改过的版本替换你的脚本

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

echo 做的就是将其参数输出到标准输出(在你的情况下意味着显示在屏幕上)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接