Howto स्विच / चेज यूजर आईडी witin एक बैश स्क्रिप्ट उसी स्क्रिप्ट में कमांड निष्पादित करने के लिए?


14

क्या किसी स्क्रिप्ट के भीतर उपयोगकर्ता की पहचान को स्विच करने का एक तरीका है (किसी इंस्टॉलेशन प्रक्रिया के रूट के रूप में निष्पादित) बाहरी स्क्रिप्ट को कॉल किए बिना कुछ कमांड निष्पादित करने के लिए, फिर rootअन्य कमांड चलाने के लिए वापस लौटें ?

की तरह:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...


तुम एक इस जवाब पर नजर है चाहिए stackoverflow.com/a/17758312/1243547
क्लाउस

जवाबों:


28

नहीं, लेकिन आप इसे sudoचलाने के लिए शेल का उपयोग कर सकते हैं और इसे कमांड करने के लिए एक हेरेडोक का उपयोग कर सकते हैं ।

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami

यह निश्चित रूप से एक ही स्क्रिप्ट में चीजों को एक साथ रखने में काम करता है और कमांड प्रतिस्थापन का उपयोग भी कर सकता है यदि सब कुछ
ईओएफ के

यह उत्तर प्रश्न के सभी उत्तरों से बेहतर है कि यह एक डुप्लिकेट है
डैन डैस्केल्स्कु

1
मुझे लगभग आश्चर्य है, अगर मैं ऐसा करने के लिए था, तो मैं ईओएफ का उपयोग नहीं करूंगा, और इसके बजाय हेरेडोक का नाम बदलकर सूदो रखूंगा। इस तरह मुझे याद होगा कि मैं युक्त कोड के अंदर सुपर उपयोगकर्ता के रूप में चल रहा हूं।
बजे जो हेमिंग

किसी कारण से, ऐसा लगता है कि heredoc कमांड में var सेट करना, var सेट नहीं हैं। अगर मैं कोशिश करता हूं BLA="something"और फिर उदाहरण देता हूं : echo "In: $BLA"ऐसा लगता है कि बीएलए खाली है
एफ्रन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.