卷曲:返回奇怪的输出比预期,但为什么?

时间:2014-10-28 15:38:52

标签: shell curl

我使用curl检查我是否可以访问其中一个代理服务器上的特定文档。 如果检查代理是否是负载均衡器的成员,则会对该文件进行检查。

示例:

[root@PRX scripts]# curl http://`hostname`:8080/proxy/keepalive?file=/workspace/temp/1.txt
ppp
[root@PRX scripts]# 

此输出是预期的。

如果我尝试比较此输出,则测试为假:

#!/bin/bash
tmp=$(curl http://$(hostname):8080/proxy/keepalive?file=/workspace/temp/1.txt)
echo $tmp
if [ "$tmp" = "ppp" ]; then
    echo "Match"
else
    echo "No match"
fi

我使用调试模式(bash -x)运行脚本:

[root@PRX scripts]# bash -x testscript
+++ hostname
++ curl 'http://XXXXX.com:8080/proxy/keepalive?file=/workspace/temp/1.txt'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     5    0     5    0     0   2326      0 --:--:-- --:--:-- --:--:--  5000
+ tmp=$'ppp\r'
+ echo $'ppp\r'
ppp
+ [[ $'ppp\r' = ppp ]]
+ echo 'No match'
No match
[root@PRX scripts]#

我还尝试将curl的输出写入/tmp/tmp中的临时文件,然后cat文件,但我得到相同的响应。您可以在调试输出中看到$tmp变量,其中包含curl的输出显示

tmp=$'ppp\r'

而不是

tmp='ppp'

任何人都可以对这个问题有所了解并解释这种行为吗? 提前谢谢,

1 个答案:

答案 0 :(得分:2)

\r是一个回车符,它就在那里,因为Web服务器返回DOS行终止符。

您可以使用tr

删除它们
TMP=$(curl "http://$HOSTNAME:8080/proxy/keepalive?file=/workspace/temp/1.txt" | tr -d '\r')
if [[ $TMP = ppp ]]
then 
  echo "It's true"
fi