बैश में, मैं नोटिस करता हूं कि यदि पुनर्निर्देशन का उपयोग करने वाला कोई कमांड विफल हो जाएगा, तो इससे पहले चलने वाले कोई भी प्रोग्राम नहीं चलाए जाएंगे।
उदाहरण के लिए, यह प्रोग्राम "a" फाइल को खोलता है और "a" फाइल करने के लिए 50 बाइट्स लिखता है। हालाँकि, इस आदेश को अपर्याप्त अनुमतियों (~ रूट / लॉग) वाली फ़ाइल पर पुनर्निर्देशन के साथ चलाने से "a" के फ़ाइल आकार में कोई परिवर्तन नहीं होता है।
$ ./write_file.py >> ~root/log
-bash: /var/root/log: Permission denied
cdal at Mac in ~/experimental/unix_write
$ ls -lt
total 16
-rw-rw-r-- 1 cdal staff 0 Apr 27 08:54 a <-- SHOULD BE 50 BYTES
किसी को लगता है कि कार्यक्रम चलेगा, किसी भी आउटपुट को कैप्चर करेगा (लेकिन फाइल "a" में भी लिखें), और फिर ~ रूट / लॉग में किसी भी आउटपुट को लिखने में विफल रहें। इसके बजाय कार्यक्रम कभी नहीं चलाया जाता है।
यह क्यों होता है, और यह कैसे "चेक" के क्रम का चयन करता है यह एक कार्यक्रम को निष्पादित करने से पहले करता है? क्या अन्य जाँच भी की जाती हैं?
पीएस मैं यह निर्धारित करने की कोशिश कर रहा हूं कि क्या क्रोन के तहत चलने वाला एक कार्यक्रम वास्तव में "अनुमति से वंचित" फ़ाइल पर पुनर्निर्देशित होने पर चला गया था।
write_file.py
प्रोग्राम को चलाएं और इसके आउटपुट को ~root/log
bash में भेजें :" क्षमा करें, लेकिन आपको उस फ़ाइल को लिखने की अनुमति नहीं है! "शेल बिल्कुल वही कर रहा है जो उसे करना चाहिए। यदि वह ऐसा नहीं कर सकता जो आपने उससे पूछा था। करते हैं, यह आपको तुरंत सूचित करता है कि कोई समस्या क्यों है, जिससे आपको यह तय करने का अवसर मिलता है कि इसके साथ कैसे व्यवहार किया जाए। यदि यह महत्वपूर्ण था कि आपने इसे बचाने के लिए एक स्थान निर्दिष्ट किया हो, तो यह ASS | U | ME के लिए गलत होगा। stdout को बचाए बिना इसे चलाना ठीक था।
stdout
को बिल्कुल वैसा ही कर दिया है। इसलिए, आप कोई भी आउटपुट नहीं देखेंगे, भले ही आपका प्रोग्राम चले।