Возникли проблемы с 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)
command-line
bash
output
DarkNeuron
источник
источник
if [[ -z $test ]]
почти наверняка расширится до того,if [[ -z ]]
когда$test
станет пустым, что, вероятно, нарушит условное. Для защиты от этого, просто поместите переменную в кавычки:if [[ -z "$test" ]] ; then
.Ответы:
Это связано с тем, что сообщение об ошибке отправляется потоку STDERR (дескриптор файла 2), а не STDOUT (дескриптор файла 1), который вы захватываете с помощью подстановки команд
$()
.Просто сосредоточиться на получении строки, либо на STDOUT, либо на STDERR:
в этом случае
[ -z "$test" ]
проверка приведет к ложным срабатываниям, поскольку сообщение об ошибке будет сохранено в переменной. Вместо этого вы можете сделать:Также я думаю, это должно получить то, что вы хотите, учитывая, что статус выхода тривиален:
источник