我试图读取一个文件,其中的每一行都是一个CVE ID。对于每个CVE,我想做一个卷曲来得到它的严重性,然后存储一个新的CSV文件,格式是cve-id,cve-严重性。
下面是我使用的脚本,它正确地读取ID,但没有正确地进行curl调用。当我运行它时,它只输出每个curl调用的空值。
我试过用倒计时代替$(),但是结果是一样的。我在这里做错什么了?
#!/bin/bash
filename="cves.csv"
while read line
do
echo "$line"
cve_result=$(curl -s "https://cve.circl.lu/api/cve/${line}")
echo "$cve_result"
done < $filename还尝试了这些变化,结果都是相同的(空的):
cve_result=$(curl -s "https://cve.circl.lu/api/cve/${line}")
cve_result=`curl -s "https://cve.circl.lu/api/cve/${line}"`
cve_result=$(curl -s "https://cve.circl.lu/api/cve/$line")
cve_result=`curl -s "https://cve.circl.lu/api/cve/$line"`
cve_result=$(curl -s https://cve.circl.lu/api/cve/$line)
cve_result=`curl -s https://cve.circl.lu/api/cve/$line`下面是CSV文件的示例:
CVE-2014-0114
CVE-2014-9970
CVE-2015-1832
CVE-2015-2080
CVE-2015-7521发布于 2022-10-11 19:36:24
您的代码适用于我(即,每个curl调用都会提取一堆数据)。
如果我将我的(linux)文件转换为包含windows/dos行结束(\r\n),那么curl调用不会生成任何内容。
此时,我猜想您的输入文件有windows/dos行结束(您可以通过运行head -2 cves.csv | od -c来验证,并且应该在每一行的末尾看到序列\r \n )。
假设这是您的问题,那么您需要删除\r字符;下面是几个选项:
dos2unix cves.csv -只需运行一次,因为这将更新filecurl ... ${line//$'\r'/}" - use参数替换以去掉\r。
https://stackoverflow.com/questions/74033116
复制相似问题