2012-05-07 14 views
9

मेरे पास एक चर है जो .bashrc के माध्यम से सेट किया गया है।आप वर्तमान उपयोगकर्ता पर्यावरण चर को कैसे देखते हैं

~/.bashrc में:

PROJ_HOME=~/Projects/stable 

एक bash खोल से, मैं इस तरह कुछ करने के लिए करना चाहते हैं:

$ su -l kenneth -c 'echo $PROJ_HOME' 

हालांकि, जब मैं यह कर, उम्मीद /home/kenneth/Projects/stable मुद्रित नहीं है ।

कोई विचार यह है कि मैं यह कैसे कर सकता हूं?

उत्तर

7

आप चर निर्यात करने के लिए की जरूरत है। पर्यावरण को संरक्षित करने के लिए आपको विकल्प su पर उपयोग करने की आवश्यकता नहीं हो सकती है।

export PROJ_HOME=~/Projects/stable 
+0

निर्यात मानते हुए रूट के env vars में बदल जाता है। क्या 'su -m' रूट के env को संरक्षित करता है? या केनेथ? – 8None1

+0

@ 8None1: मैन पेज के अनुसार: "वर्तमान वातावरण को संरक्षित करें ..."। तो इसका मतलब है कि 'su'' नामक उपयोगकर्ता का वातावरण (संभवतः केनेथ - रूट प्रश्न में किसी भी जानकारी के आधार पर शामिल नहीं है)। –

6

su -m -l kenneth -c 'echo $PROJ_HOME' के साथ प्रयास करें। पर्यावरण को संरक्षित रखना चाहिए।

EDIT अपना प्रश्न एक और बार पढ़ना, मुझे लगता है कि मैं इसे उलट सकता हूं। आप यह भी कोशिश कर सकते हैं: su -l kenneth -c '. /home/kenneth/.bashrc; echo $PROJ_HOME

8

क्या आपने विकल्प su -m का प्रयास किया है?

-m, --preserve-environment 
       do not reset environment variables 

उदाहरण के लिए: सु -m केनेथ -c 'गूंज $ PROJ_HOME'

+5

हम्म, उत्तर के लिए धन्यवाद लेकिन ऐसा लगता है कि यह काम नहीं करता है। '$ su -m kenneth -c" echo $ PROJ_PATH "'। मुझे एक खाली रेखा मिलती है। –

-1

उपयोग आदेश के आसपास एकल उद्धरण:

$ su -l kenneth -c 'echo $PROJ_PATH' 

डबल उद्धरण के रूप में जड़ (रिक्त स्ट्रिंग) के द्वारा देखा $PROJ_PATH का मूल्य की व्याख्या है, तो उपयोगकर्ता केनेथ के रूप में आदेश "echo (empty string)" निष्पादित करता है।

सिंगल कोट्स 'echo $PROJ_PATH' को कमांड के रूप में पास करेंगे, और केनेथ के पर्यावरण में $PROJ_PATH का मान गूंज जाएगा।

संबंधित मुद्दे