मैं सभी उपयोगकर्ताओं के लिए उपनाम कैसे निर्धारित कर सकता हूं?


38

मेरे पास Ubuntu 14.04.2 है। मैं इसे बनाना चाहता हूं ताकि सभी उपयोगकर्ताओं के पास स्वचालित रूप से उपनामों का एक विशिष्ट सेट हो। मेरे पास मेरे व्यक्तिगत .bashrc में मेरे उपनाम सेट हैं, लेकिन मैं उन्हें अन्य उपयोगकर्ताओं में मैन्युअल रूप से कॉपी करना नहीं चाहता। आदर्श रूप में इसे स्वचालित रूप से नए बनाए गए उपयोगकर्ताओं के लिए भी सेट करना चाहिए।


1
"पूर्व निर्धारित" करके, क्या आप चाहते हैं कि आप सभी नए उपयोगकर्ताओं को कुछ उपनामों के साथ बनाया जाना चाहिए, जिन्हें वे फिर से आसानी से पुन: कॉन्फ़िगर कर सकते हैं? या क्या आपका मतलब है कि आप वैश्विक उपनाम बनाना चाहते हैं, जैसे कि सभी उपयोगकर्ताओं के पास हर समय उनके पास होगा (और उन्हें फिर से परिभाषित / परिभाषित करने में सक्षम होगा ... लेकिन जब वे अपनी स्वयं की कॉन्फ़िगरेशन फ़ाइलों को देखते हैं, तो उन्हें नहीं देखें, जो उन्हें मिल सकती है befuddling)? या कुछ और? उत्तर: अंडरटेन्डिंग .bashrc और .bash_profile (इसके विषम शीर्षक के बावजूद, मेरा मानना ​​है कि प्रश्न और यह वास्तव में काफी समान हैं)।
एलियाह कगन

जवाबों:


50

आप /etc/profile.d/सभी उपयोगकर्ताओं के लिए उपनाम बनाने के लिए एक स्क्रिप्ट बना सकते हैं :

  1. 00-aliases.sh(या किसी अन्य फैंसी नाम) नामक फ़ाइल बनाएँ /etc/profile.d:

    gksu gedit /etc/profile.d/00-aliases.sh
    
  2. आपको इस फाइल में एलियासेस डालते हैं। उदाहरण:

    alias foo='bar --baz'
    alias baz='foo --bar'
    
  3. फ़ाइल सहेजें

  4. परिवर्तनों को लागू करने के लिए किसी भी खुले टर्मिनल को पुनरारंभ करें।
  5. का आनंद लें!

कुछ नोट:

  • /etc/profileएक वैश्विक फ़ाइल है जो पहले चलती है ~/.profile
  • /etc/profile.d/ एक फ़ोल्डर है जिसमें लिपियों द्वारा बुलाया जाता है /etc/profile
  • जब /etc/profileकहा जाता है (जब आप किसी शेल को शुरू / लॉगिन करते हैं), तो यह समाप्त होने वाली किसी भी फ़ाइल को खोजता .shहै /etc/profile.d/और इन कमांडों में से एक के साथ उन्हें चलाता है:

    source /etc/profile.d/myfile.sh
    

    . /etc/profile.d/myfile.sh
    
  • 00-बाकी स्क्रिप्ट से पहले इसे निष्पादित करने के लिए मैं फ़ाइल का नाम रख रहा हूं ।
  • आप अपने उपनाम भी जोड़ सकते हैं /etc/profile, लेकिन यह अनुशंसित नहीं है।

2
अच्छी तरह से काम! क्या आप मुझे एक संक्षिप्त विवरण दे सकते हैं कि /etc/profile.d का उद्देश्य क्या है?
ब्रायन सिज़ेमोर

1
@BrianSizemore: मैंने कुछ स्पष्टीकरण के साथ अपना जवाब अपडेट किया। क्या आपके पास कोई प्रश्न अधिक है?
हेलियो

1
यह इसे बहुत अच्छी तरह से समझाता है। स्पष्टीकरण मुझे अन्य उपयोगों को भी विकसित करने में मदद करता है। पूरी सहायताके लिए शुक्रिया!
ब्रायन सिज़ेमोर

4
इस उत्तर में विधि का उपयोग नहीं किया जाना चाहिए। (या ) .shफाइलों में उपनाम केवल लॉगिन गोले के लिए परिभाषित किया जाएगा और वे इंटरैक्टिव गैर-लॉगिन गोले में काम नहीं करेंगे। पर्यावरण चर के विपरीत, बैश बच्चे प्रक्रियाओं के लिए उपनाम निर्यात नहीं कर सकते हैं, यहां तक ​​कि बच्चे को गोले के गोले भी नहीं। यह विधि ठीक से काम करने के लिए लग सकती है यदि यह केवल लॉगिन गोले में परीक्षण किया जाता है, जैसे कि वर्चुअल कंसोल में या एसएसएच के माध्यम से लॉग ऑन करके प्राप्त किया गया मूल शेल, लेकिन यह उनके बच्चे के गोले में विफल रहता है और जीयूआई टर्मिनल खिड़कियों द्वारा शुरू किए गए गोले में भी विफल रहता है। /etc/profile.d//etc/profile
एलियाह कगन

2
@Helio मेरा जवाब करने के लिए Undertanding .bashrc और .bash_profile क्या लक्ष्य है पर निर्भर करता है, विस्तृत विवरण के साथ साथ दो अन्य तरीकों देता है। मैं अनिश्चित हूँ अगर इस या उस प्रश्न को एक डुप्लिकेट माना जा सकता है। मैंने उनकी आवश्यकताओं के बारे में ओपी से स्पष्टीकरण प्राप्त करने के लिए इस प्रश्न पर टिप्पणी की है। यह प्रश्न अधिक संकुचित रूप से है कि एक तो मुझे लगता है कि यह मेरे लिए ठीक होगा कि मैं एक छोटे से उत्तर को पोस्ट करने के लिए यहां कुछ सामग्री को अपने लंबे समय में कवर करूं। (अभी के लिए, मैं अपनी टिप्पणी के लिए ओपी द्वारा उत्तर पाने की उम्मीद कर रहा हूं।)
एलियाह कगन

6

जैसा कि यहाँ बताया गया है , इसमें संभवतः वैश्विक उपनाम जोड़ना बेहतर है /etc/bash.bashrc:

alias foo='bar --baz'
alias baz='foo --bar'

, क्योंकि लिपियों को/etc/profile.d कुछ (गैर-लॉगिन) गोले के लिए अनदेखा किया जा सकता है । मुझे यह पता लगाने में घंटों लग गए कि /etc/profile.dकाम क्यों नहीं किया।

उदाहरण के लिए देखें https://askubuntu.com/a/606882/ और अंडरस्टैंडिंग .bashrc और .bash_profile गोले के बीच के अंतर के लिए।


5

एक उपनाम केवल एक शेल के अंदर काम करेगा। यदि आप एक निष्पादन योग्य के रूप में व्यापक रूप से सुलभ कुछ चाहते हैं, तो आप /usr/binउदाहरण के लिए , एक छोटी शॉर्टकट स्क्रिप्ट जोड़ सकते हैं :

#!/bin/sh
ls -l "$@"

"$@"निष्पादन करने के लिए के माध्यम से सभी तर्कों से गुजरता है। स्क्रिप्ट का नाम निष्पादन योग्य का नाम होगा।

स्रोत: https://unix.stackexchange.com/a/52509/15954


यह उत्तर असंबंधित लगता है। स्वीकृत उत्तर सही ढंग से प्रश्न का उत्तर देता है जबकि यह वर्कअराउंड प्रदान करता है।
ब्रायन सिज़ेमोर

3
@BrianSizemore मैं आपका एक ही सवाल था लेकिन इस समाधान पर ठोकर खाई जो मेरे मामले में अधिक उपयुक्त था; उम्मीद है कि यह एक समान स्थिति में दूसरों की मदद करेगा। बहुत सारे लोगों के लिए, उर्फ ​​बस ठीक हो जाएगा।
jtpereyda

1
@BrianSizemore यह उत्तर एक आम गलत धारणा (जो मेरे पास भी थी) को स्पष्ट करता है और उपयोगी और सीधे संबंधित है।
a20

0

/ Etc / bashrc

  • सिस्टम विस्तृत कार्य और उपनाम
  • पर्यावरण सामान / आदि / प्रोफ़ाइल में जाता है

जब तक आप यह नहीं जानते कि आप क्या कर रहे हैं, इस फ़ाइल को बदलना अच्छा नहीं है। अपने वातावरण में कस्टम परिवर्तन करने के लिए /etc/profile.d/ में custom.sh शेल स्क्रिप्ट बनाना बेहतर है, क्योंकि यह भविष्य के अपडेट में विलय की आवश्यकता को रोक देगा।

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