为什么由cygwin运行时shell中的字符串比较不起作用

时间:2018-07-24 20:18:15

标签: windows shell curl cygwin

我有一个非常简单的脚本来检查网站返回的状态码。我为从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进行查找替换,所以我不相信这是行尾,但谁知道。

1 个答案:

答案 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,我什至不确定为什么要放在第一位。删除已修复的问题。