Azure管道中Shell脚本中的Curl命令不工作

Azure管道中Shell脚本中的Curl命令不工作,azure,azure-devops,devops,Azure,Azure Devops,Devops,我正在尝试使用azure管道运行一个脚本,该脚本提供某个url的状态代码 我的Azure Yaml文件: pool: vmImage: ubuntu-16.04 steps: - script: echo Hello displayName: ' Welcome' - script: cat webpages.txt displayName: 'display file' - script: curl -s -w '%{http_code}\n' -o /dev/null http

我正在尝试使用azure管道运行一个脚本,该脚本提供某个url的状态代码

我的Azure Yaml文件:

pool:
  vmImage: ubuntu-16.04

steps:
- script: echo Hello
  displayName: ' Welcome'
- script: cat webpages.txt
  displayName: 'display file'
- script: curl -s -w '%{http_code}\n' -o /dev/null https://www.google.co.in
  displayName: 'Checking Curl Code'
- script: cat -v script.sh
  displayName: 'Cariage retrun'
- task: ShellScript@2
  inputs:
    scriptPath: script.sh
我的Script.sh文件

#!/bin/sh
while read line ; do echo "$line - `curl -s -w '%{http_code}\n' -o /dev/null $line`" ;done < webpages.txt
问题

运行管道时,curl命令不起作用 而产出则是

2020-11-17T09:59:05.4094324Z ##[section]Starting: ShellScript
2020-11-17T09:59:05.4102534Z ==============================================================================
2020-11-17T09:59:05.4102904Z Task         : Shell script
2020-11-17T09:59:05.4103204Z Description  : Run a shell script using Bash
2020-11-17T09:59:05.4103453Z Version      : 2.165.2
2020-11-17T09:59:05.4103701Z Author       : Microsoft Corporation
2020-11-17T09:59:05.4104086Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/shell-script
2020-11-17T09:59:05.4104506Z ==============================================================================
2020-11-17T09:59:05.7637654Z [command]/bin/bash /home/vsts/work/1/s/script.sh
2020-11-17T09:59:05.7692023Z https://www.vodafone.co.uk/good-stuff
2020-11-17T09:59:05.7700780Z  - 000
2020-11-17T09:59:05.7797276Z https://www.vodafone.co.uk/help-and-information/cancel-your-account
2020-11-17T09:59:05.7798378Z  - 000
2020-11-17T09:59:05.7851183Z https://www.vodafone.co.uk/help-and-information/complaints
2020-11-17T09:59:05.7866944Z  - 000
2020-11-17T09:59:05.7908420Z https://www.vodafone.co.uk/help-and-information/complaints/code-of-practice
2020-11-17T09:59:05.7909144Z  - 000
2020-11-17T09:59:05.7967261Z https://www.vodafone.co.uk/help-and-information/costs-and-charges
2020-11-17T09:59:05.7967920Z  - 000
2020-11-17T09:59:05.8023329Z https://www.vodafone.co.uk/help-and-information/costs-and-charges/call-and-text-charges
2020-11-17T09:59:05.8024443Z  - 000
2020-11-17T09:59:05.8095527Z https://www.vodafone.co.uk/help-and-information/costs-and-charges/data-charges
但是如果我把卷发换成

curl -s -w '%{http_code}\n' -o /dev/null https://www.vodafone.co.uk/good-stuff

它的输出为200。

当我在本地运行它时,它可以完美地工作:

$ while read line ; do echo "$line - `curl -s -w '%{http_code}\n' -o /dev/null $line`" ;done < webpages.txt
https://www.vodafone.co.uk/good-stuff - 200
https://www.vodafone.co.uk/help-and-information/cancel-your-account - 200
(...)
$whilereadline;do echo“$line-`curl-s-w”{http_code}\n'-o/dev/null$line`”;完成
我注意到,
\n
字符打印在您的
echo$行中,这可能是导致问题的原因。解决这个问题的办法是:

  • ${line}
    替换为
    ${line}
  • echo
    替换为
    echo-n
    以省略换行符
  • 所以这就是我所做的

  • 我用一个简单的curl$行替换了整个curl命令
  • 它给了我一个错误:curl:(3)在URL中发现非法字符
  • 所以,我发现我的URL添加了一些不需要的值
  • 我把我的do换成了
  • line=${line%$'\r'}
    读行时;do line=${line%$'\r'};echo“$line-`curl-s-w'{http_code}\n'-o/dev/null$line`”;完成

    瞧,它起作用了

    所以问题在于
    script:curl-s-w“{http_code}\n'-o/dev/nullhttps://www.google.co.in
    或在shell脚本中
    脚本路径:script.sh
    ?两者都包含curl命令问题在于curl,相同的curl命令w/o变量,“curl-s-w'{http\u code}\n'-o/dev/null”可以正常工作,但是如果相同的命令有一个变量,curl-s-w'{http\u code}\n'-o/dev/null$line`……它不会工作。您好,我在本地尝试过,它工作得很好,但当我在Azure Yaml管道中运行它时,还剩200英镑。当我在Gitlab中运行相同的脚本时,它工作得非常好。嗨,感谢分享,你可以,它可以帮助其他社区成员获得相同的问题,我们可以存档此线程,谢谢。
    $ while read line ; do echo "$line - `curl -s -w '%{http_code}\n' -o /dev/null $line`" ;done < webpages.txt
    https://www.vodafone.co.uk/good-stuff - 200
    https://www.vodafone.co.uk/help-and-information/cancel-your-account - 200
    (...)
    
    line=${line%$'\r'}
    while read line ; do line=${line%$'\r'} ; echo "$line - `curl -s -w '%{http_code}\n' -o /dev/null $line`"; done < webpages.txt