Bash 错误/非法格式或缺少URL-在自定义卷曲中传递变量值

Bash 错误/非法格式或缺少URL-在自定义卷曲中传递变量值,bash,ubuntu,curl,ip,windows-subsystem-for-linux,Bash,Ubuntu,Curl,Ip,Windows Subsystem For Linux,我在我的Windows10机器上使用Linux外壳(Ubuntu20.04)。我有一个bash脚本,应该 浏览包含IP列表的.txt文件 使用站点对每个IP进行卷曲,以获得修改后的卷曲输出 #/bin/bash input=“/mnt/d/Docs/BR Resources/iplist.txt” 而IFS=读取-r行 做 卷曲https://ipinfo.io/美元线 完成

我在我的Windows10机器上使用Linux外壳(Ubuntu20.04)。我有一个bash脚本,应该

  • 浏览包含IP列表的.txt文件
  • 使用站点对每个IP进行卷曲,以获得修改后的卷曲输出
  • #/bin/bash
    input=“/mnt/d/Docs/BR Resources/iplist.txt”
    而IFS=读取-r行
    做
    卷曲https://ipinfo.io/美元线
    完成<“$input”
    
    循环中每个IP的预期输出为:

    {“ip”:“xx.xx.xx.xx”,
    “主机名”:“c0241.brsol.com”,
    “城市”:“阿什本”,
    “地区”:“弗吉尼亚州”,
    “国家”:“美国”,
    “loc”:“xx.xxxx,xx.xxxx”, “组织”:“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输出?

    我在生成输出的windows计算机上执行了以下步骤:
    已将文件转换为
    dos2unix.exe./test.sh

    test.sh:

    # !/usr/bin/bash
    input="iplist.txt"  
    while IFS= read -r line  
    do   
     curl https://ipinfo.io/$line  
    done < "$input"
    

    bash版本:GNU bash,版本4.3.42(4)-发行版

    您能提供一个
    iplist.txt
    的示例吗?首先使用echo运行这个循环:
    ,而IFS=read-r行;“做回声”https://ipinfo.io/$line”;done<“$input”
    是DOS/Windows格式的脚本或iplist.txt文件(请参阅)?如果这不是问题,请尝试将
    set-x
    放在脚本的开头,这样脚本可以在运行时打印发生的事情,这有助于找出问题所在。将shebang更改为
    #/bin/bash-x
    以查看有关正在执行的命令的更多详细信息。这很可能是windows的问题:-)@Sandun,
    \r
    表示URL末尾有一个(通常不可见)回车字符,可能是因为ipinfo.txt文件是DOS/windows格式。如果您有
    dos2unix
    命令,它会将文件转换为unix格式。当IFS=$'\r'read…时,您也可以使用
    来获取
    read
    来为您提取回车。有更多的细节和选项。嗨,你能详细说明第二行吗?是否将文件转换为dos2unix.exe./test.sh?这是否意味着我必须在我的Ubuntu Shell(在Windows机器内)中安装一个名为dos2unix的东西?@Sundun我看到你的Shell脚本是DOS格式(\r/carries return CRLF)而不是unix格式。可能是你使用了一个类似notepad++的编辑器,它将文件制作成DOS格式,因此,我通过操作dos2unix将其转换为一个unix文件。然后,该文件将在unix上正常工作。Dos格式为:CRLF(每行以CR结尾,然后是LF),unix格式为:LF(每行以LF字符结尾)。您可以在ubuntu中使用:
    sudo apt get install dos2unix
    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   300  100   300    0     0    300      0  0:00:01 --:--:--  0:00:01   532
    {
      "ip": "36.13.6.167",
      "hostname": "kd036013006167.ppp-bb.dion.ne.jp",
      "city": "Saitama",
      "region": "Saitama",
      "country": "JP",
      "loc": "35.9081,139.6566",
      "org": "AS2516 KDDI CORPORATION",
      "postal": "330-0853",
      "timezone": "Asia/Tokyo",
      "readme": "https://ipinfo.io/missingauth"
    }  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current