Не может получить вывод в переменную в Bash

Испытывание затруднений из-за redis-cli. Я хочу проверить если соединение с redis отказан (сервер вниз), через Bash.

Простой тест

#!/bin/bash
test=$(redis-cli exit) #exit out of the "not connected console"
if [[ -z $test ]] ; then
    echo "I'm empty :("
fi

Я ожидал бы Could not connect to Redis at 127.0.0.1:6379: Connection refused быть сохраненным в $test, но этом тексте производится к консоли вместо этого.

Я не уверен, что продолжается. У кого-либо есть какие-либо идеи?

(Ubuntu 14.04.1)

15
задан 16 August 2016 в 09:17

1 ответ

Поэтому сообщение об ошибке отправляется в поток STDERR (дескриптор файла 2), не STDOUT (дескриптор файла 1), который Вы получаете с заменой команды $().

Просто фокусировка на получении строки, или на STDOUT или на STDERR:

test="$(redis-cli exit 2>&1)"

в этом случае эти [ -z "$test" ] тест приведет к ложным положительным сторонам, поскольку сообщение об ошибке будет сохранено в переменной. Вместо этого можно сделать:

#!/bin/bash
test="$(redis-cli exit 2>/dev/null)"
if [[ -z $test ]] ; then
    echo "I'm empty :("
fi

Также я думаю, это должно получить то, что Вы хотите, учитывая статус выхода, тривиально:

if redis-cli exit &>/dev/null; then
    echo 'Succeeded!!'
else
    echo 'Failed!!'
fi
20
ответ дан 23 November 2019 в 02:46

Другие вопросы по тегам:

Похожие вопросы: