शेयर एलियासेस और पाथ को zsh और बैश के बीच सेट करें


24

वह शेल जो मैं आमतौर पर उपयोग करता हूं zsh। मेरे पास कुछ कार्यक्रमों में रंग को सक्षम करने के लिए कई उपनाम हैं जैसे lsऔर grep। मैंने अपना कस्टम पथ भी निर्धारित किया है ताकि मैं गैर-मानक स्थान (जैसे जैसे ~/bin/) में प्रोग्राम निष्पादित कर सकूं ।

मैं रूट के शेल को नहीं बदलूंगाzsh , लेकिन मैं इन सेटिंग को साझा करना चाहूंगा ताकि रूट के साथ भी ऐसा हो सके। मुझे पता चला कि zshसोर्सिंग नहीं है /etc/profile। मैं इसे स्रोत कर सकता हूं /etc/zsh/zprofile, लेकिन मैं कुछ और "उचित" तरीके से चाहूंगा।

जवाबों:


16

मैं एक फ़ाइल बना सकते हैं /etc/commonprofileऔर दोनों में यह स्रोत /etc/profileऔर /etc/zsh/zprofile। यह आपको सामान्य सेटिंग्स साझा करने और फिर भी bashक्रमशः zshविशिष्ट सेटिंग्स और सिंटैक्स का उपयोग करने का अवसर देता /etc/profileहै zprofile


अन्य अच्छे उत्तरों में से मुझे लगता है कि यह मुझे सबसे अच्छा, अपेक्षाकृत सरल और "साफ" लगता है
phunehehe

"स्रोत" से आपका क्या तात्पर्य है?
हुलंग

@ हेलंग शेल प्रोफाइल एक्सप्लिसिटी को लोड करने के लिए, यहां 'स्रोत /path/to/.shell_profile' आता है। 'स्रोत' पर मैन पेज देखें।
इताची

17

Zsh में एक श कम्पेटिबिलिटी मोड है जो इसे POSIX श कोड और कुछ बैश एक्सटेंशन को निष्पादित करने देगा। जब तक आप bash फीचर्स का उपयोग नहीं करते हैं, जो zsh के पास नहीं है (एक ही सिंटैक्स के साथ), तो आप दोनों शेल द्वारा एक ही फाइल को सॉर्ट कर सकते हैं। emulateसंगतता मोड में zsh डाल करने के लिए अंतर्निहित का उपयोग करें ; -Lविकल्प के साथ , अनुकरण एन्कोडिंग फ़ंक्शन के लिए स्थानीय है (एनक्लोज़िंग सॉर्स्ड स्क्रिप्ट नहीं)।

source_sh () {
  emulate -LR sh
  . "$@"
}

वातावरण चर जैसी चीजों के लिए, आप उपयोग कर सकते हैं source_sh /etc/profileमें /etc/zprofileऔर source_sh ~/.profileमें ~/.zprofile, के बाद से प्रोफाइल फ़ाइलों की संभावना बैश विशिष्ट सुविधाओं का उपयोग करने के लिए नहीं हैं।

उपनाम और फ़ंक्शन परिभाषा जैसी चीज़ों के लिए, चूंकि शेल आरसी फ़ाइलों में बहुत सारी चीज़ें शामिल हैं, जिन्हें साझा नहीं किया जा सकता है (शीघ्र, कुंजी बाइंडिंग, पूर्ण सेटिंग्स, ...), एक फ़ाइल का उपयोग करें जैसे ~/.sh_aliasesकि इसमें sourced है ~/.bashrcऔर source_sh'd' में है ~/.zshrc


2
कहने का एक तरीका होना चाहिए "गिल्स द्वारा सभी उत्तरों को स्वचालित रूप से उखाड़ फेंकना"। इससे मेरा काफी समय बच जाता। नहीं, वास्तव में, आपके जवाब रॉक। हमेशा सटीक, अच्छी तरह से लिखा और व्यापक।
fschmitt

@ एफएसटीमिट: मैं सहमत हूं। और आप देख सकते हैं कि यह संपादित भी नहीं है! यहाँ प्रदान किया गया यह संकेत वास्तव में अच्छा है।
कोई अभी भी आपको MS-DOS

4

एक साधारण सीलिंक के बारे में क्या?

ln -s /etc/profile /etc/zsh/zprofile

अगर आपको कुछ सशर्त आरंभीकरण की आवश्यकता है, तो आप इसे कुछ इस तरह से जोड़ सकते हैं:

#Determine our shell without using $SHELL, which may lie
shell="sh"
if test -f /proc/mounts; then
   case $(/bin/ls -l /proc/$$/exe) in
        *bash) shell=bash ;;
        *dash) shell=dash ;;
        *ash)  shell=ash ;;
        *ksh)  shell=ksh ;;
        *zsh)  shell=zsh ;;
    esac
fi

हम्म लेकिन मुझे नहीं लगता कि यह सोर्सिंग की तुलना में कोई क्लीनर होगा। क्या कोई फ़ाइल है जो zsh और bash दोनों पढ़ेगी?
फुन्ते

आपको क्या लगता है कि सोर्सिंग या सिमलिंक बनाना "स्वच्छ" समाधान नहीं है?
इकोक्स

मुझे सिर्फ कहने का मतलब है कि अगर जरूरत पड़ी तो मैं सिम्बल को प्रबंधित करने के बजाय फाइल को स्रोत बनाना चाहूंगा। मैं फ़ाइलों के बीच बहुत अधिक निर्भरता नहीं बनाना चाहता।
फुनेहे

1
एक और अधिक पोर्टेबल विकल्प /bin/ls -l /proc/$$/exeहै ps -o comm= -p $$। यह पूरी तरह से विश्वसनीय नहीं है क्योंकि कुछ गोले इस बात पर निर्भर करते हैं कि उन्हें कैसे लगाया गया था; बस का परीक्षण व्यवहार में $0में .profileएक बेहतर संकेत होने की संभावना है। लेकिन सबसे गोले कि उपयोगी सुविधाओं (bash, ksh, zsh) प्रदान करते हैं बस पहचाना जा सकता है (और उनके संस्करण की पहचान की है, जो एक बड़ा प्लस) है कुछ चर परीक्षण द्वारा: $BASH, $BASH_VERSION, $BASH_VERSINFO, $KSH_VERSION, ${.sh.version}; $ZSH_VERSION
गिल्स एसओ- बुराई को रोकें '

इकोक्स, आपका केस स्टेटमेंट $ SHELL का उपयोग किए बिना हमारे शेल zsh4 # डिटर्मिन का सही पता नहीं लगाता है, जो कि शेल = "श" को ले सकता है यदि परीक्षण -f / proc / mounts; फिर केस $ (/ बिन / एलएस-एल / ​​प्रोक / $ $ / एक्सई) बैश में) शेल = बैश ;; * डैश) शेल = डैश ;; * राख) शेल = राख ;; * ksh) शेल = ksh ;; * zsh ) शेल = zsh ;; #matches zsh4 esac Fi
ब्रायन हंट

0

जैसा कि चर का संबंध है, मुझे आभास है कि आप मॉड्यूल और मॉड्यूलफाइल्स को याद कर रहे हैं [1]। एक बार जब आप ऐसा करना शुरू कर देते हैं, तो एक ही मॉड्यूल फ़ाइल की सुविधा से विभिन्न गोले (incl। Bash & zsh), अजगर, पर्ल और यहां तक ​​कि अधिक वातावरण के लिए आम प्रोफाइल बनाना आसान होगा।

एलियासेस को उसी तरह से परिभाषित करना भी संभव है; हालाँकि, आप जल्दी से पाएंगे कि उपनाम लगातार गोले के बीच अच्छी तरह से विरासत में नहीं मिलते हैं और उन्हें वर्कअराउंड की आवश्यकता हो सकती है।

[१] http://en.wikipedia.org/wiki/Environment_Modules_(software)

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