我正在尝试读取一个文件,其中的每一行都是一个CVE ID。对于每个CVE,我想进行一次curl操作以获取其严重性,然后将结果存储在一个新的CSV文件中,格式为cve-id,cve-severity。
下面是我正在使用的脚本,它可以正确读取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
1条答案
按热度按时间gupuwyp21#
Your code works for me (ie, each
curl
call pulls down a bunch of data).If I convert my (linux) file to contain windows/dos line endings (
\r\n
) then thecurl
calls don't generate anything.At this point I'm guessing your input file has windows/dos line endings (you can verify by running
head -2 cves.csv | od -c
and you should see the sequence\r \n
at the end of each line).Assuming this is your issue then you need to remove the
\r
characters; a couple options:dos2unix cves.csv
- only have to run once as this will update the filecurl ... ${line//$'\r'/}"
- use parameter substitution to strip out the\r