मैं फ़ाइल अनुमतियों को निष्पादित करने के बारे में उलझन में हूँ, जैसा कि मैं उम्मीद करता हूं कि वह व्यवहार नहीं कर रहा है। शायद इसलिए कि मेरी उम्मीदें गलत हैं। वैसे भी:
मेरे पास एक स्क्रिप्ट फ़ाइल है, सादगी के लिए बस कहा जाता है s, में स्थित है ~/bin। इस उदाहरण के लिए, फ़ाइल में केवल निम्न पंक्तियाँ हैं:
#!/bin/zsh
echo "Test";
बहुत आसान।
मैं करने के लिए नेविगेट ~/binनिर्देशिका, और chmodकी फाइल अनुमति sके लिए 400- यानी, केवल पढ़ने के लिए मुझे के लिए ही। कोई निष्पादन अनुमति नहीं। तो फिर मैं इसकी राह में प्रवेश करते हुए स्क्रिप्ट को निष्पादित करने का प्रयास करता हूं:
% ./s
zsh: permission denied: ./s
अब तक सब ठीक है। गलत अनुमतियों के कारण फ़ाइल को निष्पादित नहीं किया जा सकता है। अनुमतियों को ऊपर ले जाना 500(अनुमति देना निष्पादित करना) भी ठीक काम करता है - इन अनुमतियों के साथ, फ़ाइल ठीक निष्पादित होती है:
% ./s
Test
यह सब उम्मीद के मुताबिक है। लेकिन फिर मैं chmodनीचे अनुमति देता हूं 400(फिर से अनुमति को निष्पादित करें), sourceफ़ाइल को निगलना का प्रयास करें , और ऐसा होता है:
% source s
Test
हालाँकि अनुमतियाँ हैं 400, स्क्रिप्ट निष्पादित करता है।
तो यहाँ मेरा सवाल है: क्यों ./sविफल रहता है (जैसे यह होना चाहिए) लेकिन source sसामान्य रूप से निष्पादित होता है? क्या यह निष्पादन की अनुमति के पूरे उद्देश्य को नहीं हराता है?
पर 400अनुमतियाँ, sh sऔर zsh sभी काम करते हैं।
मुझे यकीन है कि मैं कहीं न कहीं कुछ गलत कर रहा हूं। जहां मेरे लिए किसी बिंदु बाहर कर सकते हैं, और के बीच अंतर की व्याख्या ./s, source s, sh sऔर zsh s?