सवाल बैश स्क्रिप्ट में विभिन्न उपयोगकर्ता की $ HOME निर्देशिका कैसे प्राप्त करें?


मुझे एक अलग उपयोगकर्ता के रूप में, और उस उपयोगकर्ता के अंदर एक बैश स्क्रिप्ट का भाग निष्पादित करने की आवश्यकता है $HOME निर्देशिका। हालांकि, मुझे यकीन नहीं है कि इस चर को कैसे निर्धारित किया जाए। उस उपयोगकर्ता को स्विच करना और कॉल करना $HOME सही स्थान प्रदान नहीं करता है:

# running script as root, but switching to a different user...
su - $different_user
echo $HOME
# returns /root/ but should be /home/myuser

अद्यतन करें:

ऐसा प्रतीत होता है कि समस्या इस तरह से है कि मैं उपयोगकर्ताओं को अपनी स्क्रिप्ट में स्विच करने की कोशिश कर रहा हूं:

$different_user=deploy

# create user
useradd -m -s /bin/bash $different_user

echo "Current user: `whoami`"
# Current user: root

echo "Switching user to $different_user"
# Switching user to deploy

su - $different_user
echo "Current user: `whoami`"
# Current user: root
echo "Current user: `id`"
# Current user: uid=0(root) gid=0(root) groups=0(root)

sudo su $different_user
# Current user: root
# Current user: uid=0(root) gid=0(root) groups=0(root)

उपयोगकर्ताओं को स्विच करने और बैश स्क्रिप्ट में एक अलग उपयोगकर्ता के रूप में कमांड निष्पादित करने का सही तरीका क्या है?


44
2017-12-10 20:35


मूल


आप इसे स्थानीय रूप से परिभाषित खाते मानते हुए हमेशा / etc / passwd से निकाल सकते हैं। - Marc B
su - $different_user पर्याप्त होना चाहिए था। क्या आप वाकई लॉग इन हैं myuser। दौड़ने का प्रयास करें id सत्यापित करने के लिए आदेश। कुछ लॉगिन खोल पर सेट है nologin और जैसे ही आप लॉगिन करते हैं, यह निकलता है myuser। - anubhava
@anubhava मैंने अपने प्रश्न को अद्यतन करने के लिए अद्यतन किया कि मैंने उपयोगकर्ता को कैसे बनाया। अनिवार्य रूप से: useradd -m -s /bin/bash $different_user। - Andrew
कृपया मेरे उत्तर पर एक और नज़र डालें। मैंने जो कुछ करने का प्रयास किया है, उससे मेल खाने के लिए मैंने इसे काफी हद तक बदल दिया है। - Michael Kropat


जवाब:


अद्यतन करें: इस प्रश्न के शीर्षक के आधार पर, लोग यहां आते हैं बस एक रास्ता तलाश रहे हैं खोज एक अलग उपयोगकर्ता की होम निर्देशिका, बिना आवश्यकता के अभिनय करना वह उपयोगकर्ता

उस स्थिति में, सबसे सरल समाधान का उपयोग करना है tilde विस्तार ब्याज के उपयोगकर्ता नाम के साथ संयुक्त eval (जिसकी आवश्यकता है, क्योंकि उपयोगकर्ता नाम को एक के रूप में दिया जाना चाहिए निर्विवाद शाब्दिक काम करने के लिए tilde विस्तार के क्रम में):

eval echo "~$different_user"    # prints $different_user's home dir.

ध्यान दें सामान्य के उपयोग के बारे में चेतावनी eval लागू करें; इस मामले में, धारणा यह है कि आप के मूल्य को नियंत्रित करते हैं $different_user और इसे केवल उपयोगकर्ता नाम के रूप में जानते हैं।

इसके विपरीत, इस उत्तर का शेष शेष है नाम से कार्य एक उपयोगकर्ता तथा प्रदर्शन प्रदर्शन उस उपयोगकर्ता की होम निर्देशिका में


ध्यान दें:

  • डिफ़ॉल्ट रूप से प्रशासक और अन्य उपयोगकर्ताओं के माध्यम से अधिकृत अगर sudoers फ़ाइल के माध्यम से अन्य उपयोगकर्ताओं का प्रतिरूपण कर सकते हैं sudo
  • निम्नलिखित पर आधारित है चूक की विन्यास sudo - इसकी कॉन्फ़िगरेशन बदलने से यह अलग-अलग व्यवहार कर सकता है - देखें man sudoers

बुनियादी रूप एक अन्य उपयोगकर्ता के रूप में एक आदेश निष्पादित करने के लिए है:

sudo -H -u someUser someExe [arg1 ...]
  # Example:
sudo -H -u root env  # print the root user's environment

ध्यान दें:

  • यदि आप निर्दिष्ट करने के लिए उपेक्षा करते हैं -H, प्रतिरूपण प्रक्रिया (निर्दिष्ट उपयोगकर्ता के संदर्भ में लागू प्रक्रिया) रिपोर्ट करेगा मूल उपयोगकर्ता की होम निर्देशिका में $HOME 
  • प्रतिरूपण प्रक्रिया में एक ही कामकाजी निर्देशिका होगी जो invoking प्रक्रिया के रूप में होगी।
  • प्रतिरूपण प्रक्रिया करता है कोई खोल विस्तार नहीं स्ट्रिंग अक्षर पर तर्क के रूप में पारित किया गया है, क्योंकि प्रतिरूपण प्रक्रिया में कोई खोल शामिल नहीं है (जब तक कि someExe एक खोल होने के लिए होता है) - द्वारा विस्तार प्रेरक खोल - प्रतिरूपण प्रक्रिया से गुज़रने से पहले - स्पष्ट रूप से अभी भी हो सकता है।

वैकल्पिक रूप से, आप एक प्रतिरूपण प्रक्रिया कर सकते हैं एक (एन प्रतिरूपण) खोल के रूप में या के माध्यम से चलाओ, उपसर्ग द्वारा someExe या इसके साथ -i  या  -s - निर्दिष्ट नहीं है someExe ... एक बनाता है इंटरैक्टिव खोल:

  • -i एक बनाता है लॉग इन करें के लिए खोल someUser, जो निम्नलिखित का तात्पर्य है:

    • someUserकी उपयोगकर्ता-विशिष्ट खोल प्रोफ़ाइल, यदि परिभाषित किया गया है, तो लोड किया गया है
    • $HOME इशारा करना someUserघर की निर्देशिका है, तो वहाँ है की कोई ज़रूरत नहीं -H (हालांकि आप अभी भी इसे निर्दिष्ट कर सकते हैं)
    • प्रतिरूपण खोल के लिए कामकाजी निर्देशिका है someUserघर निर्देशिका है।
  • -s एक गैर-लॉगिन खोल बनाता है:

    • कोई खोल नहीं प्रोफ़ाइल लोड किया गया है (हालांकि इंटरैक्टिव के लिए प्रारंभिक फाइलें nonlogin गोले हैं; उदाहरण के लिए, ~/.bashrc)
    • जब तक आप भी निर्दिष्ट नहीं करते हैं -H, प्रतिरूपण प्रक्रिया रिपोर्ट करेगा मूल उपयोगकर्ता की होम निर्देशिका में $HOME 
    • प्रतिरूपण खोल में एक ही कामकाजी निर्देशिका होगी जो invoking प्रक्रिया के रूप में होगी।

एक खोल का उपयोग करना मतलब है कि कमांड लाइन पर पारित स्ट्रिंग तर्क हो सकता है खोल विस्तार के अधीन - नीचे प्लेटफ़ॉर्म-विशिष्ट अंतर देखें - प्रतिरूपण खोल द्वारा (संभवतः आविष्कार खोल द्वारा प्रारंभिक विस्तार के बाद); निम्नलिखित दो आदेशों की तुलना करें (जो उपयोग करते हैं एक समय से पहले विस्तार को रोकने के लिए उद्धरण प्रेरक शेल):

  # Run root's shell profile, change to root's home dir.
sudo -u root -i eval 'echo $SHELL - $USER - $HOME - $PWD'
  # Don't run root's shell profile, use current working dir.
  # Note the required -H to define $HOME as root`s home dir.
sudo -u root -H -s eval 'echo $SHELL - $USER - $HOME - $PWD'

क्या खोल आह्वान किया जाता है "शेल पर्यावरण परिवर्तक द्वारा निर्धारित किया जाता है यदि यह सेट है या पासवाड (5) में निर्दिष्ट शेल" (के अनुसार man sudo)। ध्यान दें कि के साथ -s यह है प्रेरक उपयोगकर्ता का पर्यावरण जो मायने रखता है, जबकि साथ -i यह है प्रतिरूपित उपयोगकर्ता की।

ध्यान दें कि वहाँ हैं शैल से संबंधित व्यवहार के संबंध में मंच अंतर (के साथ -i या -s):

  • sudo लिनक्स पर स्पष्ट रूप से केवल एक स्वीकार करता है निष्पादन योग्य या निर्मित के रूप में नाम प्रथम निम्नलिखित तर्क -s/-i, जबकि ओएसएक्स एक पूरे खोल कमांड लाइन गुजरने की अनुमति देता है; उदाहरण के लिए, ओएसएक्स स्वीकार करता है sudo -u root -s 'echo $SHELL - $USER - $HOME - $PWD' सीधे (के लिए कोई ज़रूरत नहीं है eval), जबकि लिनक्स नहीं है (के रूप में sudo 1.8.95p)।

  • के पुराने संस्करण sudo लिनक्स पर एक खोल में दिए गए तर्कों के लिए खोल विस्तार लागू नहीं करते हैं; उदाहरण के लिए, के साथ sudo 1.8.3p1 (उदाहरण के लिए, उबंटू 12.04), sudo -u root -H -s echo '$HOME' रूट उपयोगकर्ता के संदर्भ में परिवर्तनीय संदर्भ का विस्तार करने के बजाय बस स्ट्रिंग अक्षर "$ HOME" को जोड़ता है। कम से कम के रूप में sudo 1.8.9p5 (उदाहरण के लिए, उबंटू 14.04) यह तय किया गया है। इसलिए, पुराने के साथ भी लिनक्स पर विस्तार सुनिश्चित करने के लिए sudo संस्करण, पूरे आदेश को एक तर्क के रूप में पास करें eval; उदा .: sudo -u root -H -s eval 'echo $HOME'। (हालांकि ओएसएक्स पर जरूरी नहीं है, यह भी वहां काम करेगा।)

  • root उपयोगकर्ता की $SHELL चर शामिल हैं /bin/sh ओएसएक्स 10.9 पर, जबकि यह है /bin/bash उबंटू 12.04 पर।

चाहे प्रतिरूपण प्रक्रिया में एक खोल शामिल है या नहीं, इसके पर्यावरण में निम्न चर सेट होंगे, जो आक्रमणकारी उपयोगकर्ता को प्रतिबिंबित करेगा और कमांड: SUDO_COMMAND, SUDO_USER, SUDO_UID=, SUDO_GID

देख man sudo तथा man sudoers कई और subtleties के लिए।

प्रेरणा के लिए @ डेविडडब्ल्यू और @ एंड्रू को टोपी की युक्ति।


73
2017-12-10 22:41





बाश में, आप उपयोगकर्ता को ढूंढ सकते हैं $HOME एक tilde चरित्र के साथ उपयोगकर्ता की लॉगिन आईडी prefixing द्वारा निर्देशिका। उदाहरण के लिए:

$ echo ~bob

यह उपयोगकर्ता को गूंज देगा bobकी $HOME निर्देशिका।

हालांकि, आप कहते हैं कि आप एक विशेष उपयोगकर्ता के रूप में एक स्क्रिप्ट निष्पादित करने में सक्षम होना चाहते हैं। ऐसा करने के लिए, आपको सेटअप करने की आवश्यकता है sudo। यह आदेश आपको विशेष आदेशों को किसी विशेष उपयोगकर्ता के रूप में निष्पादित करने की अनुमति देता है। उदाहरण के लिए, निष्पादित करने के लिए fooउपयोगकर्ता के रूप में bob:

$ sudo -i -ubob -sfoo

यह एक नया खोल शुरू होगा, और -i उपयोगकर्ता के डिफ़ॉल्ट वातावरण और खोल के साथ लॉगिन का अनुकरण करेगा (जिसका अर्थ है foo आदेश से निष्पादित होगा bob's$ HOME` निर्देशिका।)

सूडो सेटअप करने के लिए थोड़ा जटिल है, और आपको शूडर फ़ाइल देखने में सक्षम होने के लिए बस एक सुपरसियर होना चाहिए (आमतौर पर /etc/sudoers)। हालांकि, इस फ़ाइल में आमतौर पर कई उदाहरण हैं जिनका आप उपयोग कर सकते हैं।

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


20
2017-12-10 21:29



वादा, लेकिन -i तथा -s पारस्परिक रूप से अनन्य प्रतीत होता है। केवल -i पर्याप्त होगा। - mklement0
असाइन करने में परेशानी हो रही है ~$different_user एक चर के लिए और इसे बदलना $HOME। क्या आप एक उदाहरण प्रदान कर सकते हैं? - Andrew
@Andrew उद्धरण चिह्नों का उपयोग न करें! user_home=~$different_user। ध्यान दें कि चारों ओर कोई उद्धरण चिह्न नहीं है ~$different_user। आपका ओएस आपको पुन: असाइन करने से भी रोक सकता है HOME क्योंकि इसका विशेष अर्थ है। आप उपयोग कर रहे sudo? यह अनुशंसित तरीका है। - David W.


उपयोगकर्ता के घर डीआईआर को खोजने के लिए हल्के तरीके से खोज रहे लोगों के लिए वैकल्पिक उत्तर के लिए ...

के साथ गड़बड़ करने की बजाय su हैक, या एक और लॉन्च करने के ऊपरी हिस्से के साथ परेशान bash बस खोजने के लिए खोलें $HOME वातावरण विविधता...

बैश के माध्यम से हल्के सरल Homedir क्वेरी

इसके लिए विशेष रूप से एक आदेश है: getent

getent passwd someuser | cut -f6 -d:

getent बहुत कुछ कर सकते हैं ... बस देखें मैन पेजpasswd nsswitch डेटाबेस उपयोगकर्ता की प्रविष्टि में वापस आ जाएगा /etc/passwd प्रारूप। बस इसे कोलन पर विभाजित करें : खेतों को पार्स करने के लिए।

इसे अधिकांश लिनक्स सिस्टम (या किसी भी सिस्टम का उपयोग करने पर स्थापित किया जाना चाहिए जीएनयू लिब सी (RHEL: glibc-common, देब: libc-bin)


14
2018-01-29 06:29



getent जैसा कि आप बताते हैं, लिनक्स के लिए विशिष्ट है; बैश के उपयोग के लिए एक सरल और मंच-तटस्थ तरीका है tilde विस्तार ब्याज के उपयोगकर्ता नाम के साथ (eval आवश्यक है, क्योंकि उपयोगकर्ता नाम को एक के रूप में दिया जाना चाहिए निर्विवाद शाब्दिक काम के विस्तार के लिए): eval echo "~$different_user" - सामान्य चेतावनी का उपयोग फिर से करें eval लागू करें। - mklement0
इसे करने के लिए बहुत अच्छा विचार है! वर्तमान उपयोगकर्ता घर के लिए एक और विकल्प है: eval echo "~$(who -m | awk '{ print $1 }')" या केवल eval echo "~"। मैक ओएस एक्स पर, वहाँ है dscl उपयोगिता, लेकिन इसका उत्पादन पार्स करना बहुत कठिन है, और आपको पहले से ही पास करने की आवश्यकता है /Users Homedir या uid (उदा .: dscl . -read /Users/$(who -m | awk '{ print $1 }')  या dscl . -search /Users UniqueID $(id -u))। कुछ प्लेटफार्मों पर बस बैश का उपयोग करना संभव है, या किसी भी प्रकार का मूल ओएस डिटेक्शन वैसे भी करना आसान है। - TrinitronX
वर्तमान उपयोगकर्ता के लिए, आपको इसकी आवश्यकता नहीं है eval बिल्कुल: अनजान ~ वर्तमान उपयोगकर्ता की होम निर्देशिका वापस कर देगा (उदा। echo ~)। यदि आपको वास्तव में वर्तमान उपयोगकर्ता के उपयोगकर्ता नाम की स्पष्ट रूप से आवश्यकता है, $USER सरल, कुशल, और POSIX- अनुपालन है; whoami यह भी सरल है, लेकिन तुलनात्मक रूप से महंगा और गैर-पॉज़िक्स। तुंहारे who -m-आधारित आदेश, जबकि POSIX- अनुपालन, और भी महंगा है। निष्कर्ष निकालने के लिए: हाँ, एक POSIX- संगत खोल (उदा।, बैश) का उपयोग करना सबसे सरल, सबसे कुशल और पोर्टेबल है। - mklement0
getent लिनक्स के लिए विशिष्ट है, लेकिन क्यों? यह एक स्पष्ट रूप से उपयोगी चीज है (मूल रूप से डेटाबेस को क्वेरी करने के लिए एक कमांड लाइन इंटरफ़ेस, हालांकि पाठ फ़ाइलों के माध्यम से लागू किया गया है) और आसानी से पोर्टेबल भी होना चाहिए। खैर, इसके अलावा रिकॉर्ड से मूल्य निकालने का एक तरीका होना चाहिए। यह चौराहे के उपयोग से बच जाएगा cut - David Tonhofer
@ डेविड टोनहोफर: इसका कारण getent बस पढ़ने के बजाय /etc/passwd उपयोगकर्ता और लॉगिन प्रमाणीकरण डेटा बैकएंड के विभिन्न स्रोतों की संभावना के कारण है। उपयोगकर्ता डेटाबेस जैसे विभिन्न बैकएंड हैं sssd (एसएसएस / एलडीएपी), एनआईएस, और एनआईएस +। इस पर अधिक जानकारी के लिए, कृपया देखें यह एसई nsswitch.conf के बारे में उत्तर दें। अतिरिक्त कट की आवश्यकता सबसे बड़ी नहीं है जो मैं सहमत हूं, लेकिन टूल आउटपुट यही है। उपयोग करने के लिए असली कारण getentसिस्टम पर कॉन्फ़िगर किए गए उपयोगकर्ता डेटाबेस बैकएंड से पूछताछ करने का प्रयास करना है। - TrinitronX


आप चाहते हैं -u के लिए विकल्प sudo इस मामले में। वहाँ से man पृष्ठ:

The -u (user) option causes sudo to run the specified command as a user other than root.

यदि आपको वास्तव में इसे चलाने की आवश्यकता नहीं है, तो आप उनके साथ अपनी होम निर्देशिका में जा सकते हैं ~<user>। जैसा कि, मेरी होम निर्देशिका में जाने के लिए आप उपयोग करेंगे cd ~chooban


3
2017-12-10 20:57



मुझे ज़रूरत है -u विकल्प किस आदेश के साथ? - Andrew
क्या मतलब है आपका: sudo -u $different_user su -? - Andrew
@ एंड्रयू नहीं! नहीं su उस दूसरे उपयोगकर्ता के रूप में। उस उपयोगकर्ता का उपयोग करें जिसे आप उस उपयोगकर्ता के रूप में चलाने के लिए चाहते हैं। उदाहरण के लिए, sudo -u $different_user $command - David W.
@ डेविडडब्ल्यू मुझे लगता है कि मैं एकाधिक कमांड चलाने के लिए एक रास्ता खोजने की कोशिश कर रहा था - Andrew
आप के साथ कई कमांड चला सकते हैं sudo एक ही लिपि में यदि आपको यही चाहिए। सुडो का उपयोग करना और इसे सेटअप करना इसके बारे में जाने का सबसे अच्छा तरीका है। आपके आदेश बिना उपयोगकर्ता के उस उपयोगकर्ता के रूप में चलाए जा सकते हैं। अन्यथा, आपको उस उपयोगकर्ता के रूप में साइन इन करना होगा, और यह एक नया खोल शुरू करता है जिसका अर्थ है कि आपको अपने आदेश मैन्युअल रूप से चलाने होंगे। आप इसे स्वचालित रूप से करना चाहते हैं। - David W.


तो आप चाहते हैं:

  1. निष्पादित एक बैश स्क्रिप्ट का हिस्सा एक अलग उपयोगकर्ता के रूप में
  2. उस उपयोगकर्ता की $ HOME निर्देशिका में बदलें

से प्रेरित यह जवाब, यहां आपकी स्क्रिप्ट का अनुकूलित संस्करण है:

#!/usr/bin/env bash

different_user=deploy

useradd -m -s /bin/bash "$different_user"

echo "Current user: $(whoami)"
echo "Current directory: $(pwd)"
echo

echo "Switching user to $different_user"
sudo -u "$different_user" -i /bin/bash - <<-'EOF'
    echo "Current user: $(id)"
    echo "Current directory: $(pwd)"
EOF
echo

echo "Switched back to $(whoami)"

different_user_home="$(eval echo ~"$different_user")"
echo "$different_user home directory: $different_user_home"

जब आप इसे चलाते हैं, तो आपको निम्न प्राप्त करना चाहिए:

Current user: root
Current directory: /root

Switching user to deploy
Current user: uid=1003(deploy) gid=1003(deploy) groups=1003(deploy)
Current directory: /home/deploy

Switched back to root
deploy home directory: /home/deploy

2
2017-12-10 21:11



आपको उपयोग करना चाहिए #!/usr/bin/env bash शेबांग के रूप में। - RedX
@RedX मुझे लगता है, अगर आप लिनक्स पर नहीं हैं ... - Michael Kropat
देख stackoverflow.com/questions/10376206/preferred-bash-shebang - RedX


यह लिनक्स में काम करता है। यह सुनिश्चित नहीं है कि यह अन्य * निक्स में कैसे व्यवहार करता है।

  getent passwd "${OTHER_USER}"|cut -d\: -f 6

2
2017-08-19 16:59





मैं यह भी ढूंढ रहा था, लेकिन एक उपयोगकर्ता को बस पथ प्राप्त करने के लिए प्रतिरूपण नहीं करना चाहता था!

user_path=$(grep $username /etc/passwd|cut -f6 -d":");

अब आपकी लिपि में, आप इसका उल्लेख कर सकते हैं $user_path ज्यादातर मामलों में होगा /home/username

मान लें: आपने पहले सेट किया है $username इच्छित उपयोगकर्ता नाम के मूल्य के साथ। स्रोत: http://www.unix.com/shell-programming-and-scripting/171782-cut-fields-etc-passwd-file-into-variables.html


0
2017-12-28 23:18



पासवाड फ़ाइल में केवल स्थानीय उपयोगकर्ता होते हैं, इसलिए यह एडी / एलडीएपी एकीकृत उपयोगकर्ताओं के लिए काम नहीं करेगा। आपको इसके बजाय 'गेटेंट' द्वारा प्रदान की गई अमूर्त परत का उपयोग करना चाहिए (उदाहरण के ऊपर देखें) - Saustrup
ओह बढ़िया! टीआईएल। :-) अब मुझे वह स्क्रिप्ट मिलनी है .. - Grizly


त्वरित और गंदा, और इसे एक चर में स्टोर करें:

USER=somebody
USER_HOME="$(echo -n $(bash -c "cd ~${USER} && pwd"))"

0
2018-03-05 07:39





मैं इस सवाल से जूझ रहा था क्योंकि मैं ओएस एक्स के लिए एक बैश स्क्रिप्ट में ऐसा करने का एक तरीका ढूंढ रहा था, इसलिए / etc / passwd सवाल से बाहर था, और मेरी स्क्रिप्ट को रूट के रूप में निष्पादित किया गया था, इसलिए समाधान बनाना eval या bash -c खतरनाक आह्वान करते हुए क्योंकि उन्होंने उपयोगकर्ता नाम निर्दिष्ट चर में कोड इंजेक्शन की अनुमति दी।

जो मुझे मिला वह यहां है। यह आसान है और एक सबहेल के अंदर एक चर नहीं डालता है। हालांकि इसे स्क्रिप्ट को रूट द्वारा चलाने की आवश्यकता होती है क्योंकि यह निर्दिष्ट उपयोगकर्ता खाते में सूड करता है।

यह मानते हुए कि $ SOMEUSER में एक वैध उपयोगकर्ता नाम है:

echo "$(sudo -H -u "$SOMEUSER" -s -- "cd ~ && pwd")"

मुझे आशा है कि यह किसी की मदद करेगा!


0
2017-09-24 00:14