मैं एक उपयोगकर्ता पर्यावरण चर कैसे सेट करूं? (स्थायी रूप से, सत्र नहीं)


145

इससे मुझे चिढ़ है। मैंने कई सुझाव (सभी अलग-अलग फ़ाइलों और सिंटैक्स का उपयोग करके) देखे और उनमें से कोई भी काम नहीं किया।

मैं एक विशिष्ट उपयोगकर्ता के लिए एक पर्यावरण चर कैसे निर्धारित करूं? मैं डेबियन निचोड़ पर हूं। एबीसी = "123" बनाने के लिए मुझे फ़ाइल में सटीक सिंटैक्स क्या रखना चाहिए?


7
आपने पहले से क्या प्रयास किया था?
l0b0

1
संपादन .bashrc, .bash_profile, .profile और .ssh / eviroment। हालांकि मुझे नहीं पता कि मैंने इसे सही स्थान पर लिखा है या हर बार सही सिंटैक्स था

4
.bashrcउसके लिए मुख्य स्थान है।
rozcietrzewiacz

@rozcietrzewiacz: ठीक है लेकिन ... समाधान होने के बाद भी मैंने उस फ़ाइल के प्रारंभ और अंत में ABC1 और ABC2 सेट करने की कोशिश की और यह मेरे वातावरण में स्थापित नहीं है।

1
जांच करें कि .bash_profileकुछ ऐसा है [[ -f ~/.bashrc ]] && . ~/.bashrc
रोज़ज़ेट्रिएवेज़ेज़

जवाबों:


113

आपको घोषणा को अपने शेल के आरंभीकरण फ़ाइलों में रखना होगा:

  • यदि आप बैश, ऐश, ksh या कुछ अन्य बॉर्न-स्टाइल शेल का उपयोग कर रहे हैं, तो आप जोड़ सकते हैं

    ABC="123"; export ABC
    

    आपकी .profileफ़ाइल में ( ${HOME}/.profile) यह अधिकांश यूनिक्स प्रतिष्ठानों पर और विशेष रूप से डेबियन पर डिफ़ॉल्ट स्थिति है।

    यदि आपका लॉगिन शेल बैश है, तो आप .bash_profile( ${HOME}/.bash_profile) या .bash_loginइसके स्थान पर उपयोग कर सकते हैं ।

    नोट: यदि इनमें से कोई भी फ़ाइल मौजूद है और आपका लॉगिन शेल बैश है, .profileतो जब आप ssh पर लॉग ऑन करते हैं या टेक्स्ट कंसोल पर पढ़ा नहीं जाता है, लेकिन यह तब भी पढ़ा जा सकता है .bash_profileजब आप GUI से लॉग इन करते हैं। इसके अलावा, यदि कोई नहीं है .bash_profile, तो उपयोग करें .bashrc

  • यदि आपने zsh को अपने लॉगिन शेल के रूप में सेट किया है, तो ~/.zprofileइसके बजाय का उपयोग करें ~/.profile

  • यदि आप tcsh का उपयोग कर रहे हैं, तो जोड़ें

    setenv ABC "123"
    

    में .loginफ़ाइल ( ${HOME}/.login)

  • यदि आप शेल मैनुअल पर एक और शेल का उपयोग कर रहे हैं तो पर्यावरण चर को कैसे परिभाषित करें और शेल स्टार्टअप पर कौन सी फाइलें निष्पादित की जाती हैं।


5
su userकॉल करने वाले उपयोगकर्ता की होम डायरेक्टरी और वातावरण को ध्यान में रखते हुए, डिफ़ॉल्ट शेल् ट के लिए वर्तमान व्यवहार को उपयोगकर्ता नाम में वर्तमान शेल का स्वामित्व बदलना है। नए उपयोगकर्ता बनने के लिए इस तरह से एक शेल में प्रवेश करने के लिए, और उनकी सभी पर्यावरणीय सेटिंग्स ($ PATH, $ HOME, $ ABC, आदि) हासिल करने के लिए आपको su के पहले तर्क के रूप में एक - पास करना होगा। su - usernameआप जो मांग रहे हैं उसे पूरा करेंगे।
टिम केनेडी

1
प्रतीक्षा करें: "रूट से बाहर निकलें" से आपका क्या मतलब है? किसी भी मामले में 'सु' बनाने से शेल की शुरुआत नहीं होती है। आपको man su
माटेओ

1
आप suपहले स्थान पर क्यों थे ? क्या आपने .profileउपयोगकर्ता द्वारा उपयोग नहीं किया जा सकने वाला रूट-स्वामित्व बनाया है?
rozcietrzewiacz

1
@ यह वही है जो होना चाहिए था। सवाल यह है कि जब आप लॉग इन करते हैं तो क्या खट्टा है। इसकी जांच करने के लिए, पहले लॉग आउट करें
rozcietrzewiacz

7
क्योंकि .profileसभी बॉर्न-संगत गोले द्वारा पढ़ा जाता है, आपको उस फ़ाइल में बैश सिंटैक्स नहीं लिखना चाहिए। विशेष रूप से, export VARIABLE=valueमें refactored की जरूरत है VARIABLE=value; export VARIABLE
ट्रिपल जू

47

/etc/environmentपर्यावरण चर सेट करने के लिए फ़ाइल का उपयोग करें । फिर /etc/environmentफ़ाइल के अंदर निम्न पंक्ति जोड़ें ।

ABC="123"

अब एबीसी चर सभी उपयोगकर्ता सत्रों से सुलभ होगा। वेरिएबल आउटपुट को टेस्ट करने के लिए सबसे पहले कमांड का उपयोग करके पर्यावरण वेरिएबल को रिफ्रेश करें

source /etc/environment

और भागो echo $ABC


4
स्रोत कमांड के लिए +1। वह सभी उत्तरों में गायब था
नेरवे

5
सावधान रहें जो /etc/environmentपूर्ण बैश वाक्य रचना का समर्थन नहीं करता है, कुछ ऐसा जो मैंने कठिन तरीके से किया है। उदाहरण के लिए, निम्नलिखित लाइन पर PATH="/usr/bin:/usr/sbin"काम करना और फिर PATH="$PATH:/foo/bar"काम नहीं करना होगा
user2428118

अगर यह एक व्यक्तिगत मुद्दा है या क्या है, तो अनिश्चित, लेकिन मुझे यह सेट करने के बाद अपने ओएस को रिबूट करना पड़ा /etc/environment, भले ही मैंने बैश टर्मिनल को फिर से शुरू किया हो या टाइप किया हो source /etc/environment। इसलिए यदि आपके पास ऐसे मुद्दे हैं, जहां पर्यावरण चर नहीं है, तो रिबूट करने का प्रयास करें।
ब्लेयरग 23

9

यह एक सामान्य प्रक्रिया है जिसे आप किसी भी खोल के लिए उपयोग कर सकते हैं। किसी भी स्थिति में, आपको यह जानना होगा कि उपयोगकर्ता आमतौर पर किस शेल में लॉग इन करेगा:

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

फिर आपको यह पता लगाना होगा कि यह शेल आम तौर पर किस डॉट फाइल को पढ़ेगा:

man $shell

एक शॉर्टकट जो काम कर सकता है, वह उन डॉट-फाइल्स को सूचीबद्ध करने के लिए है जिनमें शेल का नाम है:

ls ~/.*${shell}*

यदि आप जांचना चाहते हैं कि लॉगिन के दौरान कोई एक फाइल वास्तव में पढ़ी गई है, तो आप उनमें से प्रत्येक में फाइल का नाम प्रिंट कर सकते हैं, उदाहरण के लिए:

echo .bashrc

लॉग इन करते समय, आपको तब देखना चाहिए कि कौन सी फाइलें पढ़ी जा रही हैं, और आप यह तय कर सकते हैं कि किसको संशोधित करना है। खबरदार कि आपको उपयोग करने की कोशिश नहीं करनी चाहिए echo "$0"या इसी तरह करना चाहिए , क्योंकि मूल्य इस $0बात पर निर्भर करता है कि शेल डॉट-फाइल्स को कैसे प्रोसेस करता है, और गलतफहमी हो सकती है।

जब चर को "स्थायी रूप से" घोषित करने की बात आती है, तो ध्यान दें कि यह केवल सत्र तक फैली हुई है। एक सत्र के बिना एक चर के मूल्य तक पहुंचने का कोई तरीका नहीं है, इसलिए इसका एक के बाहर कोई अर्थ नहीं है। यदि आप "केवल पढ़ने के लिए" का अर्थ है, शेल निर्भर है, और बैश में आप उपयोग कर सकते हैं:

declare -r VAR

अगर यह पहले से ही एक मूल्य है, या

declare -r VAR=value

एक ही समय में इसे असाइन करने के लिए। सभी गोले में यह सुविधा नहीं है।

अधिकांश गोले में एक चर घोषित करने के लिए, आपको एक चर नाम ( [A-Za-z_][A-Za-z0-9_]*) का उपयोग करना चाहिए , इसके बाद एक बराबर चिह्न (और बराबर चिह्न के आसपास कोई रिक्त स्थान नहीं ), फिर एक मूल्य (अधिमानतः उद्धृत जब तक कि मूल्य एक सरल नहीं है [A-Za-z0-9_]+)। उदाहरण के लिए:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1

5

निर्यात का उपयोग करें।

export ABC="123"

यह सेट करने के लिए जाँच करने के लिए, का उपयोग करें

env

और / या

env | grep ABC

इसे स्थायी रूप से जोड़ने के लिए, इसे अपनी ~/.bashrcफ़ाइल में जोड़ें ।

export ABC="123"

6
वह इसे स्थायी रूप से परिभाषित करने के लिए हॉट को जानना चाहता है , यानी परिभाषा को डालने के लिए किस फ़ाइल में।
मट्टियो

1
काम नहीं करता। एक बार जब मैं लॉग आउट होता है तो चर गया है। मुझे सत्र भर में इसकी आवश्यकता है

1
आपका मतलब है permenateऔर नहीं permenently: D
whoami

संपादित करें के लिए देखोbashrc
whoami

5
क्या permenate? क्या आपका मतलब है permanent?
SSH

3

सटीक आदेश है:

echo 'export ABC = "123"' >> ~/.profile

4
ठीक ठीक? गंभीरता से? क्या शेल (ए) पढ़ता है ~/.profileऔर (बी) पहले और बाद में जगह की अनुमति देता है =?
जी-मैन

1

मेरे लिए काम करने का सबसे अच्छा तरीका BASH शेल में .bashrc फ़ाइल को संशोधित करना है।

उदाहरण के लिए इसका उपयोग करें:

  1. अपनी .bashrc फ़ाइल खोलें
  2. इस पंक्ति को जोड़ें:

    export <VARIABLE> = "<ANY PATH/VALUE you want>"
    

    जैसे: export HOME = "/home/user/"

    उपयोग के ""रूप में उपयोग करने के लिए याद रखें ' 'काम नहीं करेगा और सोर्स करते समय आपकी bashrc फ़ाइल त्रुटि की सूचना देगी।

  3. मौजूदा सत्र में इसका स्रोत।

मैंने / etc / पर्यावरण फ़ाइल को संशोधित करने का भी प्रयास किया, लेकिन इसने मुझे एक नया पर्यावरण चर बनाने की अनुमति नहीं दी और जब मैंने इसे सॉर्ट किया, तो यह त्रुटि को परिभाषित किया कि परिभाषित चर नहीं मिला है।

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