उस उपयोगकर्ता का नाम कैसे प्राप्त करें जिसने sudo के रूप में बैश स्क्रिप्ट निष्पादित की है?


17

मैं एक बैश स्क्रिप्ट बनाना चाहता हूं जिसे सुडो के साथ निष्पादित किया जाना चाहिए लेकिन इसे निष्पादित करने वाले गैर-सूडो उपयोगकर्ता के नाम को ध्यान में रखना चाहिए। इसलिए यदि उपयोगकर्ता bobचलाता है तो sudo ./myscript.shमैं जानना चाहूंगा myscript.shकि bobइसे निष्पादित करने वाला कौन था।

आइए अंदर देखें myscript.sh:

USER=$(whoami)
# Do something that takes into account the username.

मैं उस उपयोगकर्ता का नाम कैसे जान सकता हूं जिसने इस प्रक्रिया को जन्म दिया? अधिक विशेष रूप से, मुझे whoamiप्राप्त करने bobऔर नहीं करने के बजाय क्या उपयोग करना चाहिए root?


यह एक मान्य स्क्रिप्ट नहीं है, मुझे लगता है कि आपका मतलब था USER=$(whoami)। ध्यान दें कि USERपहले से ही शेल आंतरिक चर के रूप में मौजूद है। इसके अलावा, अगर यह एक बैश स्क्रिप्ट है, तो इसका उपयोग करके चलाएं sh, जिसमें केवल POSIX- संगत उपसमुच्चय है।
nyuszika7h

संपादित क्यों नहीं? अब तय हो गया।
marcio

यह बहुत तुच्छ है, संपादन में कम से कम 6 अक्षर होने चाहिए, कम से कम सुझाए गए।
nyuszika7h

ठीक है मै समझ गया। सुझावों के लिए धन्यवाद: DI ने आमतौर #!/usr/bin/env bashपर मेरी बैश लिपियों पर इस तरह हैशबंग लगाया है ।
मार्शियो

यदि आप इसे स्पष्ट रूप से shया कुछ और के साथ कहते हैं तो हैशबैंग को नजरअंदाज कर दिया जाता है ।
nyuszika7h

जवाबों:


28

मुझे यकीन नहीं है कि यह कितना मानक है, लेकिन कम से कम उबंटू सिस्टम sudoमें निम्नलिखित पर्यावरण चर (दूसरों के बीच - ENVIRONMENTसुडो मैनपेज का अनुभाग देखें ) सेट करता है:

   SUDO_UID        Set to the user ID of the user who invoked sudo

   SUDO_USER       Set to the login of the user who invoked sudo

उदाहरण के लिए,

steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver

जैसा कि मैंने परीक्षण किया सभी प्लेटफार्मों पर उम्मीद के मुताबिक काम करता है: डेबियन, फेडोरा (रेडहैट) और फ्रीबस्ड। धन्यवाद!
14:03

एक मैक पर काम करने की पुष्टि की।
17:10 बजे

उबंटु पर भी काम करता है।
एंडी जेई

9

यदि आप चाहते हैं कि यह भी बिना काम करे sudo, तो उपयोग करें ${SUDO_USER:-$USER}। उदाहरण के लिए:

printf '%s\n' "${SUDO_USER:-$USER}"

व्याख्या

${var:-val}इसका विस्तार $varतब तक होगा , जब तक कि यह किसी भी स्थिति में खाली या खाली नहीं हो जाता है val

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