अगर मैं एक कमांड चलाता हूं।
sudo some-command && some-other-command
क्या दूसरी कमान sudo
भी प्रबलता के साथ चलाई जा रही है ?
अगर मैं एक कमांड चलाता हूं।
sudo some-command && some-other-command
क्या दूसरी कमान sudo
भी प्रबलता के साथ चलाई जा रही है ?
जवाबों:
टीएल; डीआर: नहीं
पहला कमांड है
sudo some-command
दूसरी आज्ञा है
some-other-command
कमांड sudo
निम्न कमांड लेता है और इसे उन्नत विशेषाधिकार के साथ निष्पादित करता है। &&
बहरहाल, एक आदेश से संबंधित नहीं है और पहले आदेश को क्रियान्वित करने से पहले, खोल से व्याख्या की है। यह पहले आदेश को निष्पादित करने के लिए बैश बताता है, और दूसरी सफलता पर।
तो के sudo
बारे में पता नहीं है && some-other command
। जब एलिवेटेड प्रक्रिया समाप्त हो जाती है, तो बैश अपना रिटर्न वैल्यू लेता है, और फिर दूसरे कमांड को निष्पादित करता है, जो फिर से पहले के बारे में नहीं जानता है।
यह आसानी से प्रदर्शित किया जा सकता है:
$ sudo whoami && whoami
root
username
आप जो चाहते हैं, उस तक पहुंचने के लिए, आप एक उन्नत बैश शुरू कर सकते हैं, और इसे दोनों कमांड निष्पादित कर सकते हैं:
$ sudo bash -c 'whoami && whoami'
root
root
तो अब, दोनों कमांड को रूट के रूप में निष्पादित किया जाता है, जैसा कि ऊपर वर्णित पूरी प्रक्रिया को एक उन्नत प्रक्रिया में निष्पादित किया जाता है, यानी बैश सत्र इस कमांड के साथ शुरू हुआ, जो परिष्करण के तुरंत बाद बाहर निकलता है। फिर भी, दोनों whoami
को एक दूसरे के अस्तित्व का पता नहीं है।
यह किसी भी उद्देश्य के अनुरूप नहीं है, लेकिन इस प्रदर्शन के लिए, आसान तरीका बस करना है
sudo some-command && sudo some-other-command
नहीं। कुछ उदाहरण जो ऐसा करते हैं:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
या यदि आप घोंसला आदेश चाहते हैं तो आप भी कर सकते हैं:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ sudo -s -- whoami && whoami
देता हैroot
username
sudo -s -- "whoami && whoami"
लगता है कि कमांड नहीं मिली है, कमोबेश वही है जो कमांड के रूप में मिलता है "whoami && whoami"
। && के साथ इस निर्माण का उपयोग कैसे करें? मुझे लगता है कि sudo -s cd ..
विरोध के रूप में कोई त्रुटि नहीं देता है sudo cd ..
।
sudo bash <<"EOF"
:! धन्यवाद! :-)
नहीं, या तो आपको दो बार सुडोल लिखना होगा, या कुछ करना होगा
sudo bash -c 'foo && bar'
&&
इसका मतलब है कि सही पक्षीय (दूसरा) कमांड केवल तभी चलेगा, जब लेस्ट साइडेड (पहला) कमांड सफल हो यानी एक्जिट कोड $?
हो 0
।
दोनों कमांड एक दूसरे से अलग हैं और अपने स्वयं के वातावरण में चलेंगे इसलिए दूसरी कमांड sudo
विशेषाधिकार प्राप्त नहीं होगी ।
यह आपको स्पष्ट कर देगा:
$ sudo whoami && whoami
root
foobar
नहीं, और निम्नलिखित एक बार बहुत व्यापक था।
sudo reboot && exit
बस हर किसी को कम से कम एक बार ऐसा करना चाहिए था
sudo apt-get update && sudo apt-get upgrade
इस प्रकार यह एक महान "मिक्की माउस" साक्षात्कार प्रश्न है।
यह इतनी आसानी से परीक्षण किया जाता है कि प्रश्न को एक स्टेट पेडिंग अभ्यास के लिए संदेह हो सकता है।
कमांड लाइन पर, जब आप देखते हैं
$ command one && command two
सामान्य आशय उस कमांड को निष्पादित करना है जो केवल पहले कमांड के सफल होने पर && का अनुसरण करता है।
बिल्कुल नहीं, यह सिर्फ दो लगातार कमांड लिखने के रूप में है, यह && एक कमांड में कोई अतिरिक्त विशेषाधिकार नहीं देता है। यह सिर्फ एक सेपरेटर है ।
यह साबित करने के लिए कि हम एक उदाहरण लें।
touch fileA fileB
मैंने दो फाइलें fileA और fileB बनाईं। अब मैं कमांड चलाऊंगा
sudo chown test:test fileA && chown test:test fileB
मैं इन फ़ाइलों के उपयोगकर्ता और समूह स्वामी को उपयोगकर्ता और समूह नाम परीक्षण में बदल रहा हूं। अब पहला कमांड चलना चाहिए जबकि दूसरे के बारे में क्या?
आउटपुट है:
chown: changing ownership of `fileB': Operation not permitted
इसलिए कमांड तब से नहीं चला, जब तक इसकी जरूरत नहीं है sudo
और हालांकि हम यह निष्कर्ष निकाल सकते हैं कि && दूसरे का प्रतिस्थापन नहीं हैsudo
whoami
उदाहरण के लिए +1 ।