我有一个非常简单的脚本来检查网站返回的状态码。我为从https://curl.haxx.se/download.html安装的Windows安装了curl。当我使用git bash运行此shell脚本时,它可以工作。
checkServer.sh:
code=`curl -I -sL -w "%{http_code}\\n" "www.google.com" -o /dev/null`
echo "Found code $code"
echo "Found endUrl $endUrl"
echo "x$code"
echo "x200"
if [ "x$code" = "x200" ]; then
echo "got a 200"
fi
echo "done"
输出:
$ sh "C:\Scripts\checkServer.sh"
Found code 200
Found endUrl
x200
x200
done
为什么这不起作用?在cygwin中运行时,curl返回的字符串中是否存在某些隐藏字符?我已经在脚本上用\ r \ n-> \ n进行查找替换,所以我不相信这是行尾,但谁知道。
答案 0 :(得分:1)
user1934428的注释向我展示了如何查找curl的httpcode中返回的隐藏字符。
在脚本中使用printf %s "$code" | od -cx
来输出带有我可以看到的任何隐藏字符的代码:
Found code 200
Found endUrl
x200
0000000 2 0 0 \r
3032 0d30
0000004
x200
done
因此,在末尾有一个\ r。这来自curl命令中的\\n
,我什至不确定为什么要放在第一位。删除已修复的问题。