当我运行代码时
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编辑过的
我理解它用"enter“(用新行)读$line的内容,
发布于 2020-04-26 17:40:57
问题是/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。
发布于 2020-04-26 15:44:34
可以添加缺少的双引号:
#!/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"https://stackoverflow.com/questions/61443302
复制相似问题