Kesulitan dengan redis-cli
. Saya ingin memeriksa apakah koneksi ke redis
ditolak (server down), melalui BASH.
Tes sederhana
#!/bin/bash
test=$(redis-cli exit) #exit out of the "not connected console"
if [[ -z $test ]] ; then
echo "I'm empty :("
fi
Saya berharap Could not connect to Redis at 127.0.0.1:6379: Connection refused
untuk disimpan dalam $ test, tetapi teks ini adalah output ke konsol sebagai gantinya.
Saya tidak yakin apa yang terjadi. Adakah yang punya ide?
(Ubuntu 14.04.1)
command-line
bash
output
DarkNeuron
sumber
sumber
if [[ -z $test ]]
hampir pasti akan meluas keif [[ -z ]]
saat$test
menjadi kosong, yang tampaknya akan menembus kondisi. Untuk melindungi terhadap ini, hanya menempatkan variabel dalam tanda kutip:if [[ -z "$test" ]] ; then
.Jawaban:
Itu karena pesan kesalahan sedang dikirim ke aliran STDERR (file descriptor 2), bukan STDOUT (file deskriptor 1) yang Anda tangkap dengan substitusi perintah
$()
.Hanya berfokus pada mendapatkan string, baik pada STDOUT atau STDERR:
dalam hal ini
[ -z "$test" ]
pengujian akan menghasilkan false positive karena pesan kesalahan akan disimpan dalam variabel. Sebagai gantinya Anda dapat melakukan:Juga saya pikir, ini harus mendapatkan apa yang Anda inginkan mengingat status keluar sepele:
sumber