代码在单行中运行良好,但在bash中运行不好



当我运行代码时

echo "linux.com ,"  $(dig +short ns linux.com | awk -v RS='' '{gsub("n", ", "); print $0}') 

结果

linux.com , ns1.dnsimple.com., ns2.dnsimple.com., ns3.dnsimple.com., ns4.dnsimple.com.

当我在循环中运行时,它不起作用,请建议

#!/bin/bash
#/fullpath/dns.sh
#finding DNS of all websites 
yesterday=$(date --date "1 days ago" +%F)

while IFS= read -r line
do
echo "$line,"  $(dig +short ns $line | awk -v RS='' '{gsub("n", ", "); print $0}') >>  $yesterday.csv
done < /fullpath/domains.csv

它只给我域列表

000caua5456aod4das98dcp10ad0456a0xa.club
,
007hertz.com
,
0086sp.com
,
00q198.com
,

domains.csv文件

000caua5456aod4das98dcp10ad0456a0xa.club
007hertz.com
0086sp.com
00q198.com

编辑

我所理解的是用"回车"(带新行(读取$line

问题是/fullpath/domains.csv带有DOS格式,因此您可以使用IFS:解决此问题

#!/bin/bash
#/fullpath/dns.sh
#finding DNS of all websites 
yesterday=$(date --date "1 days ago" +%F)

while IFS=$'r'"$IFS" read -r line
do
echo "$line,"  $(dig +short ns "$line" | awk -v RS='' '{gsub("n", ", "); print $0}') >>  $yesterday.csv
done < /fullpath/domains.csv

或者,您可以在运行脚本之前执行dos2unix /fullpath/domains.csv

适用于添加缺失的双引号:

#!/usr/bin/env bash
yesterday=$(date --date "1 days ago" +%F)

while IFS= read -r line
do
echo "$line,"  "$(dig +short ns "$line" | awk -v RS='' '{gsub("n", ", "); print $0}')" 
done < /fullpath/domains.csv > "$yesterday.csv"

替代您的脚本:

xargs -l1 -c 'set -- "$0" $(dig +short ns "$0"); IFS=,; echo "$*"' </fullpath/domains.csv sh >"$(date --date "1 days ago" +%F).csv"

最新更新