जवाबों:
.profile बनाम .zprofileZsh चलता है ~/.zprofile, नहीं ~/.profile, जब इसे एक लॉगिन शेल के रूप में लागू किया जाता है। कारण यह है कि लिपियों में स्क्रिप्ट को तोड़ने के लिए मानक गोले के साथ पर्याप्त असंगतताएं हैं।
Zsh चलता है ~/.profileअगर इसे कहा जाता है shया ksh। लेकिन अगर आप लॉग इन करते समय अपने उद्देश्य के लिए एक शीघ्र संकेत प्राप्त करना चाहते हैं, तो यह कोई मदद नहीं है।
आप /bin/shअपना लॉगिन शेल बना सकते हैं और अपने export SHELL=/bin/zshमें शामिल कर सकते हैं ~/.profile। फिर जब आप एक टर्मिनल खोलते हैं, तो टर्मिनल zsh लॉन्च करेगा (कुछ टर्मिनल एमुलेटर को छोड़कर $SHELLसेटिंग का पालन नहीं करता है)। लेकिन आपके पास shतब भी होगा जब आप ssh में लॉग इन करेंगे । इसके exec zshअंत में इसे शामिल किया जा सकता है ~/.profile(यह zsh द्वारा रनिंग शेल को बदल देता है), लेकिन आपको केवल यह करने के लिए सावधानी बरतने की आवश्यकता है कि इंटरेक्टिव लॉगिन के लिए और नहीं जब ~/.profileअन्य सत्रों से शामिल किया जाए जैसे कि एक्स सेशन स्टार्ट (एक अच्छा) परीक्षण माता-पिता द्वारा प्राप्त प्रक्रिया का नाम है ps -o comm= $PPID: यदि यह sshdया su, तो यह सुरक्षित है exec)।
Zsh और रन दोनों के साथ काम करने का सबसे आसान समाधान ~/.profileयह है ~/.zprofileकि इसे चलाते समय एक शॉक एमुलेशन मोड बनाया जाए ~/.profile:
emulate sh
. ~/.profile
emulate zsh
यदि आपके पास हाल ही में पर्याप्त ओश (उबंटू पर, इसका मतलब है कि ल्यूसिड के बाद से, मुझे लगता है), तो आप इसे सरल कर सकते हैं emulate sh -c '. ~/.profile'।
.zprofile बनाम .zshrcफ़ाइल ~/.profileको लॉगिन शेल द्वारा लोड किया गया है । लॉगिन शेल वह पहली प्रक्रिया है जो टेक्स्ट मोड में लॉग इन करते समय शुरू की जाती है, उदाहरण के लिए टेक्स्ट कंसोल या ssh के माध्यम से। डिफ़ॉल्ट रूप से, अधिकांश लिनक्स मशीनों पर, लॉगिन शेल बैश है, लेकिन आप इसे chshकमांड के साथ या उबंटू में "उपयोगकर्ता सेटिंग्स" जैसे किसी अन्य टूल के माध्यम से बदल सकते हैं । जब यह एक लॉगिन शेल होता है, तो bash पढ़ता है ~/.bash_profileयदि यह मौजूद है और ~/.profile, zsh केवल पढ़ता है ~/.zprofile(क्योंकि इसका सिंटैक्स पूरी तरह से पारंपरिक श के साथ संगत नहीं है)। ~/.profileजब आप एक ग्राफिकल डिस्प्ले मैनेजर में लॉग इन करते हैं , तो अधिकांश कॉन्फ़िगरेशन के तहत, एक्स सत्र स्टार्टअप स्क्रिप्ट द्वारा भी लोड किया जाता है।
जब आप एक टर्मिनल एमुलेटर शुरू करते हैं और एक शेल प्रॉम्प्ट प्राप्त करते हैं, या जब आप स्पष्ट रूप से एक शेल शुरू करते हैं, तो आपको एक शेल मिलता है जो लॉगिन शेल नहीं है। चूंकि ~/.profile(या ~/.zprofile) उन आदेशों के लिए है जिन्हें आप लॉग इन करते समय निष्पादित करना चाहते हैं, गैर-लॉगिन शेल इस फ़ाइल को नहीं पढ़ता है। इसके बजाय, जब आप एक इंटरैक्टिव zsh शुरू करते हैं, तो यह पढ़ता है ~/.zshrc। (Zsh ~/.zshrcसभी संवादात्मक गोले में पढ़ता है, चाहे वे लॉगिन गोले हों या न हों; अजीब तरह से, ~/.bashrcलॉगिन गोले में कभी नहीं पढ़ता है।)
आमतौर पर, ~/.profileइसमें पर्यावरण चर परिभाषाएँ होती हैं, और कुछ ऐसे कार्यक्रम शुरू हो सकते हैं जिन्हें आप एक बार चलाना चाहते हैं जब आप लॉग इन या पूरे सत्र के लिए करते हैं; ~/.zshrcइसमें हर शेल उदाहरण के लिए आवश्यक चीजें शामिल हैं, जैसे कि उपनाम और फ़ंक्शन परिभाषा, शेल विकल्प सेटिंग्स, पूर्ण सेटिंग्स, शीघ्र सेटिंग्स, कुंजी बाइंडिंग, आदि।
~/.profilezshलॉगिन पर लोड नहीं है ।zsh~/.zprofileलॉगिन पर लोड करता है ।zsh~/.zshrcएक नया टर्मिनल सत्र शुरू करते समय भार ।अधिक जानकारी की आवश्यकता है? गाइल्स का शानदार जवाब देखिए!
गिल्स के जवाब के अलावा, zsh के एक हालिया संस्करण के साथ आप यह कर सकते हैं:
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
... जो स्रोत .profile फ़ाइल को zsh के श-मोड के साथ प्रभाव में लाएगा। और यह केवल स्रोत के दौरान सक्रिय है। इसलिए आपको सोर्स करने के बाद इसे दोबारा चलाने के लिए वर्तमान विकल्प स्थिति को सहेजने की आवश्यकता नहीं है।
मेरे पास .zprofileसंगत है .profile(केवल पथ परिवर्तन शामिल हैं), इसलिए केवल आवश्यकता है:
ln -s .profile .zprofile
Zsh प्रलेखन मैं हाथ पर है केवल उल्लेख है /etc/profileऔर ~/.profileमें लॉग इन गोले के लिए श / ksh संगतता मोड।
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
मूल मोड लॉगिन शेल (argv [0] के साथ शुरू होता है -) उपयोग नहीं करता है ~/.profile( ~/.zprofileहालांकि यह उपयोग करेगा ):
% zsh -c 'exec -a -zsh zsh' </dev/null
(उत्पादन नही)
श / ksh संगतता मोड लॉगिन गोले .profile उपयोग करता है:
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...