Azure管道中Shell脚本中的Curl命令不工作
我正在尝试使用azure管道运行一个脚本,该脚本提供某个url的状态代码 我的Azure Yaml文件: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
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