मैं केवल एक कमांड के लिए umask कैसे बदल सकता हूं?


15

मैं लिनक्स में एक कमांड को कैसे अंजाम दे सकता हूं (zsh, अगर यह मायने रखता है) डिफ़ॉल्ट रूप से एक अलग umask के साथ, केवल एक कमांड के लिए? शायद एक ही पंक्ति में संयुक्त आदेशों का संयोजन? नया umask केवल उस कमांड पर लागू होना चाहिए और दर्ज किए गए अगले कमांड के लिए अपने डिफ़ॉल्ट मान पर वापस लौटना चाहिए।

आदर्श रूप से कमांड, उसके प्रवेश से पहले लागू होने वाले डिफ़ॉल्ट umask के लिए अज्ञेय होगा (दूसरे शब्दों में, डिफ़ॉल्ट umask निर्दिष्ट नहीं है)।

जवाबों:


19

एक उपखंड शुरू करें :

(umask 22 && cmd)

फिर नया umaskकेवल उस सबस्क्रिप्शन को बदल देगा।

ध्यान दें कि zshउपधारा प्रक्रिया में उपधारा के अंतिम आदेश को कार्यान्वित करने के बजाय किसी अन्य को forking करने का मतलब है, जिसका अर्थ है कि यदि वह आदेश बाह्य है, तो आप एक प्रक्रिया को भी बर्बाद नहीं कर रहे हैं, यह सिर्फ इतना है कि कांटा पहले किया गया है (इसलिए किया umaskजाता है) बच्चे की प्रक्रिया में जो बाद में आपकी कमांड को निष्पादित करेगा)।


2

आप इसे शेल स्क्रिप्ट में लपेट सकते हैं। ऑमस्क सभी बच्चे की प्रक्रियाओं को विरासत में मिला है।

cmd.sh:

umask 0022
cmd

या, यदि आप इसे एक कमांड लाइन में करना चाहते हैं, तो आप इस तरह से एक शेल का आह्वान कर सकते हैं, "$ (umask 0022; cmd)"
रोब बॉश

1
मैं उलझन में $ (साथ $(अपनी टिप्पणी में, अब मैं समझता हूँ: ( umask 0022; cmd )
donothingsuccessfully

वूप्स, ठीक है, कम से कम किसी ने स्पष्ट किया कि ^ ^
रोब बॉश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.