जवाबों:
.profile
बनाम .zprofile
Zsh चलता है ~/.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
इसमें हर शेल उदाहरण के लिए आवश्यक चीजें शामिल हैं, जैसे कि उपनाम और फ़ंक्शन परिभाषा, शेल विकल्प सेटिंग्स, पूर्ण सेटिंग्स, शीघ्र सेटिंग्स, कुंजी बाइंडिंग, आदि।
~/.profile
zsh
लॉगिन पर लोड नहीं है ।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...