मैं उलझन में हूँ कि क्यों ”| सच "मेकफाइल में" जैसा ही प्रभाव होता है || सच"


13

मेरे पास एक मेकफाइल है जहां मैं एक फ़ाइल को हटाने से पहले एक सेवा को रोक रहा हूं। जब यह सेवा को रोक नहीं सकता था, तो यह त्रुटि पर टूट जाएगा। यह स्पष्ट रूप से अवांछित है इसलिए मैंने सोचा कि मैं जोड़ूंगा || trueलेकिन याद किया |। इसे बना रहे हैं:

stop service foo | true
rm /etc/init/foo.conf

मैं उलझन में हूं कि यह क्यों काम कर रहा है और क्या हो रहा है। क्या इसका मतलब यह है कि trueएक आवेदन है और केवल एक खोजशब्द नहीं है? क्या यह वही है? क्या उपयोग करने का कोई अच्छा कारण है | true?

जवाबों:


16

trueऔर falseकर रहे हैं coreutils (भी आम तौर पर शैल निर्मित इन) सिर्फ 0 और गैर 0 लौटने कि, स्थितियों में, जहां आपको लगता है कि व्यवहार की जरूरत को भी हो लिए। आदमी पृष्ठों से:

सच - कुछ भी न करें, सफलतापूर्वक
झूठा करें - कुछ भी न करें, असफल

इसलिए आप आउटपुट को इसमें से निकाल stop service fooरहे हैं true, जो इसे अनदेखा करता है और 0. लौटाता है। तकनीकी रूप से यह काम करता है, लेकिन आपको शायद इसका उपयोग करना चाहिए, || trueइसलिए यह स्पष्ट है कि आपका इरादा क्या था; वहाँ वास्तव में कोई कारण नहीं है कि यह प्रयोग नहीं कर रहा है एक कार्यक्रम में उत्पादन पाइप करने के लिए


4
एकदम सही समझ में आता है। :) मुझे पता नहीं क्यों लेकिन पढ़ना "कुछ भी नहीं, असफलता से।" मुझे हंसाता है।
किट सुंडे

9
बचने | trueका एक अन्य कारण यह है कि यदि कमांड पाइप बफर को भरने के लिए पर्याप्त आउटपुट का उत्पादन करता है, तो वह trueइसे पढ़ने के लिए इंतजार करना बंद कर देगा।
cjm

3
@ CjPIPE के कारण @cjm या मरना
एंडी

6
@ किट: ध्यान दें कि foo || trueऔर foo | trueएक ही काम नहीं करेंगे: foo || trueसे आउटपुट दिखाएगा foo, जबकि अपने मानक आउटपुट के लिए foo | trueसब कुछ लिख देगा foo(और पहले से संकेत के रूप में या ब्लॉक के fooसाथ मरने की संभावना SIGPIPEहै)।
गाइल्स 'एसओ- बुराई पर रोक'

यह उत्तर "शायद" शब्द को छोड़कर एकदम सही है ...!
सैम वाटकिंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.