Переменная пуста при использовании в операторе if, но не echo

Переменная пуста при использовании в операторе if, но не echo

Я пытаюсь сохранить значение из команды curl в переменную в скрипте bash.

Скрипт выглядит так

#!/bin/bash

curr=$(pwd)
IP_addr="192.168.0.102"
username="root"
password="pass"

HTTP_STATUS=$(curl -IL --silent $username:$password@$IP_addr | grep HTTP)
echo
echo "echo the variable works!"
echo $HTTP_STATUS
isOK=$(echo $HTTP_STATUS)
status="HTTP/1.1 401 Unauthorized"

echo

if [[ $HTTP_STATUS == $status ]]; then
    echo "The same the same!"
else
    echo "$isOK is not the same as $status"
fi

echo

if [ "$status" == "$isOK" ]
then
    echo "The same the same!"
else
    echo "$isOK is not the same as $status"
fi

Я намеренно передаю неправильный пароль, чтобы curl вернул HTTP/1.1 401 Unauthorized. Мне нужна функция для проверки отправки на сервер неправильных учетных данных.

Странно то, что когда я сохраняю вывод команды curl, то есть

HTTP_STATUS=$(curl -IL --silent $username:$password@$IP_addr | grep HTTP | tee $curr/test.txt)

В файл с tee я получаю это напечатано в файле HTTP/1.1 401 Unauthorized. Но если я удалю команду tee, то есть

HTTP_STATUS=$(curl -IL --silent $username:$password@$IP_addr | grep HTTP)

И выполнить скрипт, который я получаю в терминале

./test.sh 
echo the variable works!
HTTP/1.1 401 Unauthorized

is not the same as HTTP/1.1 401 Unauthorized

is not the same as HTTP/1.1 401 Unauthorized

Я попробовал сделать следующее, но результат тот же

HTTP_STATUS=`curl -IL --silent $username:$password@$IP_addr | grep HTTP`

Переменная HTTP_STATUS кажется пустой, когда я делаю проверки в операторах if. Как это возможно и почему вывод команды сохраняется в файл с tee и echo, переменная работает, но не при использовании переменной в операторах if?

С наилучшими пожеланиями

решение1

Протокол HTTP требует, чтобы строки заголовка заканчивались символами <CR><LF> (возврат каретки и перевод строки \r\nв нотации UNIX). Чтобы увидеть, что curlна самом деле возвращается, попробуйте:

curl -IL --silent $username:$password@$IP_addr | grep HTTP | cat -v

В UNIX <LF> завершает текстовую строку, а <CR> — это просто обычный символ без особого значения. Очевидное отсутствие $isOKв последующих сообщениях связано с завершающим <CR>, который перемещает курсор обратно в начало строки. В деталях, строка

echo "$isOK is not the same as $status"

выписывает

HTTP/1.1 401 Unauthorized<CR>
 is not the same as HTTP/1.1 401 Unauthorized

оба на одной линии.

Связанный контент