Tendo problemas com redis-cli
. Quero verificar se a conexão redis
é recusada (servidor inativo), através do BASH.
Teste simples
#!/bin/bash
test=$(redis-cli exit) #exit out of the "not connected console"
if [[ -z $test ]] ; then
echo "I'm empty :("
fi
Eu esperaria Could not connect to Redis at 127.0.0.1:6379: Connection refused
ser armazenado em $ test, mas esse texto será enviado para o console.
Não tenho certeza do que está acontecendo. Alguém tem alguma ideia?
(Ubuntu 14.04.1)
command-line
bash
output
DarkNeuron
fonte
fonte
if [[ -z $test ]]
quase certamente se expandirá paraif [[ -z ]]
quando$test
ficar vazio, o que parece provável de quebrar o condicional. Para se proteger contra isso, basta colocar a variável entre aspas:if [[ -z "$test" ]] ; then
.Respostas:
Isso ocorre porque a mensagem de erro está sendo enviada ao fluxo STDERR (descritor de arquivo 2), não ao STDOUT (descritor de arquivo 1) que você está capturando com substituição de comando
$()
.Concentrando-se apenas em obter a string, em STDOUT ou STDERR:
nesse caso, o
[ -z "$test" ]
teste resultará em falsos positivos, pois a mensagem de erro será armazenada na variável Em vez disso, você pode fazer:Também acho que isso deve obter o que você deseja, dado o status de saída é trivial:
fonte