बाश में चर में उत्पादन पर कब्जा नहीं कर सकते


15

परेशान होना redis-cli। अगर redisBASH के माध्यम से कनेक्शन अस्वीकृत (सर्वर डाउन) है, तो मैं जांच करना चाहता हूं ।

सरल परीक्षण

#!/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$ परीक्षण में संग्रहीत होने की उम्मीद करूंगा , लेकिन यह पाठ कंसोल के बजाय आउटपुट है।

मुझे यकीन नहीं है कि क्या चल रहा है क्या किसी के भी पास कोई सुझाव है?

(Ubuntu 14.04.1)


ध्यान दें कि if [[ -z $test ]]लगभग निश्चित रूप से करने के लिए विस्तार होगा if [[ -z ]]जब $testखाली हो जाता है, जो सशर्त टूटने की संभावना लगती है। इससे बचाव के लिए, बस वेरिएबल को उद्धरणों में रखें if [[ -z "$test" ]] ; then:।
एक CVn

मुझे वास्तव में लगता है कि बैश के नए संस्करण हैं। मेरे परीक्षणों में वैसे भी काम करने लगता है।
डार्कनार्टन

फिर, आपके लिए अच्छा है। :-) मुझे अतिरिक्त सुरक्षा जाल पसंद है, अगर बाद में कोड को देखने पर मेरी पवित्रता को बनाए रखने के लिए और कुछ नहीं है ...
एक CVn

जवाबों:


20

ऐसा इसलिए है क्योंकि त्रुटि संदेश 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

आह, बिल्कुल। यह एक त्रुटि है! :)
डोर नाइटोरॉन

इसके अलावा, यह एक अंतर्निहित नाम (और निष्पादन योग्य) के नाम का उपयोग करने के लिए मुसीबत (यदि केवल थोड़ा सा) के लिए पूछ रहा है - एक चर नाम के लिए "परीक्षण", इसलिए दूसरे समाधान के रूप में बाहर निकलने की स्थिति का परीक्षण करना बेहतर है वह कारण भी।
जो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.