Kłopoty z redis-cli
. Chcę sprawdzić, czy połączenie redis
jest odrzucone (serwer nie działa), przez BASH.
Prosty test
#!/bin/bash
test=$(redis-cli exit) #exit out of the "not connected console"
if [[ -z $test ]] ; then
echo "I'm empty :("
fi
Oczekiwałbym, Could not connect to Redis at 127.0.0.1:6379: Connection refused
że będę przechowywany w teście $, ale ten tekst jest zamiast tego wysyłany do konsoli.
Nie jestem pewien, co się dzieje. Czy ktoś ma jakieś pomysły?
(Ubuntu 14.04.1)
command-line
bash
output
DarkNeuron
źródło
źródło
if [[ -z $test ]]
prawie na pewno rozszerzy się,if [[ -z ]]
kiedy stanie$test
się pusty, co wydaje się prawdopodobnie złamać warunek. Aby zabezpieczyć się przed tym, po prostu umieścić zmienną w cudzysłowie:if [[ -z "$test" ]] ; then
.Odpowiedzi:
Jest tak, ponieważ komunikat o błędzie jest wysyłany do strumienia STDERR (deskryptor pliku 2), a nie STDOUT (deskryptor pliku 1), który przechwytujesz za pomocą podstawiania poleceń
$()
.Skupiając się na pobieraniu ciągu, albo na STDOUT, albo na STDERR:
w takim przypadku wynik
[ -z "$test" ]
testu będzie fałszywie dodatni, ponieważ komunikat o błędzie zostanie zapisany w zmiennej. Zamiast tego możesz:Myślę też, że powinno to uzyskać to, czego oczekujesz, ponieważ status wyjścia jest trywialny:
źródło