2017-11-09 18 views
5

मैं इंटरनेट पर इस्तेमाल किया जा रहा है निम्न बैश बयान देखा:इस बैश स्टेटमेंट (कमांड || सच) में क्या विचार है?

PYTHON_BIN_PATH=$(which python || which python3 || true) 

मैं समझता हूँ कि अगर which python विफल रहता है, तो which python3 निष्पादित किया जाएगा, लेकिन मैं के अंत में true के प्रयोजन के समझ में नहीं आता शर्त। कोई उपाय?

उत्तर

2

कोशिश चल रहा है:

which python_bla || which python3_bla_bla || true 
echo $? 
0 

(bla नोट) आप RC=0 मिल जाएगा। इसका मतलब है कि यह सफलतापूर्वक अगली कमांड पर आगे बढ़ने का निर्माण है। यहाँ हम जानते python_bla या python3_bla_bla मौजूद नहीं है, लेकिन अभी भी आदेश rc=0 उदाहरण दिया: तीन आदेशों निम्न में से आर सी की जाँच करें, मैं गलत करने के लिए date आदेश की वर्तनी बदल दिया है लेकिन true0 रहने के लिए RC खड़ी कर रहा है।

date;echo $? 
Thu Nov 9 01:40:44 CST 2017 
0 
datea;echo $? 
If 'datea' is not a typo you can use command-not-found to lookup the package that contains it, like this: 
    cnf datea 
127 
datea||true;echo $? 
If 'datea' is not a typo you can use command-not-found to lookup the package that contains it, like this: 
    cnf datea 
0 

नोट:

command || : 
-1

विचार करता है, तो दोनों which विफल रहता है कुछ भी नहीं करने के लिए PYTHON_BIN_PATH स्थापित करने के लिए है।

दिख वहाँ

PYTHON_BIN_PATH=$(which python || which python3 || true) 

और

PYTHON_BIN_PATH=$(which python || which python3) 

लेकिन आदेश चलाकर बीच कोई अंतर नहीं अकेले बातें और अधिक स्पष्ट करता है। मान लीजिए कि पाइथन सिस्टम पर मौजूद नहीं है।

$(which python || which python3) 
echo $? #Returning the exit status of the previous command 
1 # A non zero status generally means the previous statement failed 
$(which python || which python3 || true) 
echo $? 
0 

संक्षेप में, अंत में true का उपयोग कर हमेशा के लिए

$(command || true) 
0

सरल एक शून्य से बाहर निकलें दर्जा देने। यह जांच करेगा कि आपके सिस्टम में बॉक्स पायथन (पायथन का संस्करण जो आपके ओएस के साथ आया है) से बाहर है या इसमें पाइथन संस्करण 3 है। यह पाइथन के निष्पादन योग्य पथ की भी पुष्टि करेगा, आप नामक वैरिएबल को echo "$PYTHON_BIN_PATH" करके प्रिंट कर सकते हैं और इसे एक बार भी देख सकते हैं।

संपादित करें: समझने के लिए यहां एक सरल उदाहरण है। मान लीजिए कि हम शून्य मान के साथ val नामक एक चर है और हम इस करते हैं:

echo $val || true 

आउटपुट तो शून्य हो जाएगा के रूप में यह पिछला आदेश किसी भी उत्पादन नहीं दिया है। मान लें कि हमारे पास val=4 है तो हम इसे निम्नानुसार चलाते हैं।

val="4" 
echo $val || true 
4 
+0

हाँ, लेकिन मैं 'TRUE' बारे में पूछा। –

+0

क्या 'पाइथन' नहीं कहता है? पायथन संस्करण – bhansa

+0

@EladWeiss, अब मेरे संपादन की जांच करें। – RavinderSingh13

1

और अधिक कठोर मुझे लगता है कि होना करने के लिए: आप भी एक ही results.Example प्राप्त करने के लिए सही करने के बजाय : ऑपरेटर का उपयोग कर सकते हैं।

उदाहरण के लिए

:

अगर aaa एक ही अस्तित्व में वैश्विक बाइनरी फ़ाइल नहीं है। which aaa को क्रियान्वित करने के बाद, आप echo $? निष्पादित कर सकते हैं और परिणाम 1 है।

लेकिन अगर आप which aaa | true निष्पादित परिणाम 0 हो जाएगा।

संबंधित मुद्दे