【发布时间】:2021-05-19 07:08:53
【问题描述】:
我在我的 Windows 10 机器中使用 Linux shell (Ubuntu 20.04)。我有一个 bash 脚本应该是
- 浏览包含 IP 列表的 .txt 文件
- 使用站点 https://ipinfo.io/ 对每个 IP 进行卷曲,以获得修改后的卷曲输出
#!/bin/bash
input="/mnt/d/Docs/BR Resources/iplist.txt"
while IFS= read -r line
do
curl https://ipinfo.io/$line
done < "$input"
循环中每个 IP 的预期输出是:
{ "ip": "xx.xx.xx.xx",
"主机名": "c0241.brsol.com",
“城市”:“阿什本”,
“地区”:“弗吉尼亚”,
“国家”:“美国”,
"loc": "xx.xxxx,xx.xxxx", "org": "BR, Inc.",
“邮政”:“xxxxx”,
"时区": "美国/纽约",
“自述文件”:“https://ipinfo.io/missingauth”}
但是,我得到的输出是这个错误:
curl:(3) URL 使用错误/非法格式或缺少 URL
iplist.txt 的示例摘录
36.13.6.167
252.125.137.71
204.50.68.40
136.122.209.112
203.47.25.30
223.96.93.56
64.137.82.169
11.183.223.40
199.169.87.25
119.198.39.119
问题似乎是 $line 的值没有与 curl 命令的其余部分一起传递。
如何解决此问题以获取此 .txt 文件中每个 IP 的修改后的 Curl 输出?
【问题讨论】:
-
你能提供一个
iplist.txt的例子吗? -
先用 echo 运行这个循环:
while IFS= read -r line; do echo "https://ipinfo.io/$line"; done < "$input" -
脚本或 iplist.txt 文件是否为 DOS/Windows 格式(参见 this question)?如果这不是问题,请尝试将
set -x放在脚本的开头,它会在运行时打印正在发生的事情,这有助于找出问题所在。 -
将 shebang 更改为
#! /bin/bash -x以查看有关正在执行的命令的更多详细信息。这很可能是 Windows 问题 :-) -
@Sandun
\r表示 URL 末尾有一个(通常不可见的)回车符,可能是因为 ipinfo.txt 文件是 DOS/Windows 格式。如果您有dos2unix命令,它会将文件转换为unix 格式。您也可以使用while IFS=$'\r' read ...获取read为您去除回车。 question I linked earlier 有更多详细信息和选项。
标签: bash ubuntu curl ip windows-subsystem-for-linux