Linux 为什么在while循环中ping未知主机?

Linux 为什么在while循环中ping未知主机?,linux,bash,Linux,Bash,我试图从csv文件中获取一列,并在while循环中ping每一行 但每次它只是显示ping:未知主机(网站) 结果总是这样 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.

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

结果总是这样

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它?

根据Glenn Jackman的建议,问题在于DOS行结尾,这里有一种简单的方法可以确保从输入中删除它们。替换:

while IFS=, read num ip; do
与:


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

的一部分,我试过使用你的脚本和csv文件,效果很好。你在向我们展示一切吗?我打赌你的csv文件有DOS风格的行结尾,所以$ip实际上是
facebook.com\r
@glennjackman,这肯定能解释一切!
-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 IFS=, read num ip; do
while IFS=$',\r' read num ip; do