为什么在内部循环中ping未知主机?

时间:2014-11-08 22:50:58

标签: linux bash

我正在尝试从csv文件中获取一个列并在while循环中ping每一行 但每次它只显示ping:未知主机(网站)

#!/bin/bash
while IFS=, read num ip; do
   echo $num
   ping -c 10 $ip
done <site.csv

csv文件的格式为

1, facebook.com
2, google.com

结果将永远是

ping: unknown host facebook.com
ping: unknown host google.com

但是当我直接ping网站时,它实际上正在运行,所以我认为不是网络问题

-bash-4.1$ ping -c 2 facebook.com
PING facebook.com (173.252.120.6) 56(84) bytes of data.
64 bytes from edge-star-shv-12-frc3.facebook.com (173.252.120.6): icmp_seq=1 ttl=70 time=94.1 ms
64 bytes from edge-star-shv-12-frc3.facebook.com (173.252.120.6): icmp_seq=2 ttl=70 time=93.8 ms

--- facebook.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1094ms
rtt min/avg/max/mdev = 93.882/94.040/94.199/0.345 ms

是while循环还是从csv读取导致问题的列?

有没有办法使用wile循环从csv文件读取网站并ping它?

1 个答案:

答案 0 :(得分:0)

跟随Glenn Jackman的建议,问题是DOS行结尾,这是一种确保从输入中删除它们的简单方法。替换:

while IFS=, read num ip; do

使用:

while IFS=$',\r' read num ip; do

通过将\r添加到IFS,这使得shell将DOS字符视为字段分隔符。这意味着它不会成为ip的一部分。