2014-10-28 1 views
1

Я использую завиток, чтобы проверить, могу ли я достичь определенного документа на одном из моих прокси-серверов. При проверке, является ли прокси-элемент членом балансировки нагрузки, выполняется проверка этого файла.Curl: Возвращает странный результат, чем ожидалось, но почему?

Пример:

[[email protected] scripts]# curl http://`hostname`:8080/proxy/keepalive?file=/workspace/temp/1.txt 
ppp 
[[email protected] 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):

[[email protected] 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 
[[email protected] scripts]# 

Я также пытался писать вывод curl в файл temp в /tmp/tmp, а затем cat файл, но я получаю тот же ответ. Вы можете увидеть в отладочный вывод, что $tmp переменная, которая имеет выход curl показывает

tmp=$'ppp\r' 

вместо

tmp='ppp' 

Может кто-нибудь, пожалуйста, пролить некоторый свет на эту тему и объяснить такое поведение? Заранее спасибо,

+0

Вы добавили '-o tmp' к вашей переменной присваивания' curl' команды. Это говорит curl для отправки вывода в файл, а не для stdout. Замена команд улавливает содержимое stdout. Если вам нужно/нужно, то вы хотите использовать 'tee'. –

+0

На самом деле это была еще одна попытка, я получаю точно такой же ответ, когда не использую переключатель «-o». –

+0

Вы уверены, что сервер дает вам последовательные результаты? Потому что если команда curl отправляет строку в stdout, то подстановка команды будет ее улавливать. –

ответ

2

\r - это возврат каретки, и он существует, потому что веб-сервер возвращает терминалы линии 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 
+0

Спасибо за редактирование. –

Смежные вопросы