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

Oje*_* G. 2 linux bash shell curl

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

data.txt 示例:

curl -X GET "https://www.google.com"
curl -X GET "https://www.facebook.com"
Run Code Online (Sandbox Code Playgroud)

我的脚本:

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

它只会给出行的输出,而不是实际进行 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"
Run Code Online (Sandbox Code Playgroud)

cod*_*ter 5

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

makingCurlCall=$(echo "$line") => this simply displays the command and not execute it
Run Code Online (Sandbox Code Playgroud)

makingCurlCall=$(eval "$line")
Run Code Online (Sandbox Code Playgroud)

或者

makingCurlCall=$("$line")
Run Code Online (Sandbox Code Playgroud)

eval如果字符串中包含的命令具有任何需要由 shell 解释的元字符,则更合适。例如><、 和$


Fre*_*red 2

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

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

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

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