ZDOTDIR के साथ, आप अपने चयन की किसी भी निर्देशिका में zshनामक एक फ़ाइल की व्याख्या करने के लिए कह सकते हैं .zshrc, यह आपके चयन की किसी भी फ़ाइल की व्याख्या करने के लिए (आवश्यक नहीं कहा जाता है .zshrc) काफी मुश्किल साबित होती है।
में shया kshअनुकरण, zshमूल्यांकन करता है $ENV; तो आप emulate zshअपने सबसे ऊपर जोड़ सकते हैं /path/to/fileऔर कर सकते हैं:
ssh -t host 'zsh -c "ARGV0=sh ENV=/path/to/file exec zsh"'
एक और बहुत जटिल दृष्टिकोण हो सकता है:
ssh -t host 'PS1='\''${${functions[zsh_directory_name]::="
set +o promptsubst
unset -f zsh_directory_name
unset PS1
. /path/to/file
"}+}${(D):-}${PS1=%m%# }'\' exec zsh -o promptsubst -f
वह एक व्याख्या के लायक है।
${foo::=value}एक चर विस्तार है जो वास्तव में सेट करता है $foo । $functionsएक विशेष साहचर्य सारणी है जो मानचित्रों को उनकी परिभाषाओं के नाम देता है।
promptsubstविकल्प के साथ , चर का $PS1विस्तार किया जाता है। तो, पहले प्रॉम्प्ट पर, उस PS1 में चर का विस्तार किया जाएगा।
zsh_directory_nameसमारोह में एक विशेष समारोह है कि विस्तार के मदद करता है ~fooकरने के लिए /path/to/somethingऔर रिवर्स। उदाहरण के लिए इसका उपयोग %~प्रॉम्प्ट में किया जाता है ताकि यदि वर्तमान निर्देशिका है /opt/myproj/proj/xतो आप इसे मैपिंग <=> ~proj:xकरने के रूप में प्रदर्शित कर सकें । इसका उपयोग पैरामीटर विस्तार ध्वज द्वारा भी किया जाता है । इसलिए यदि कोई विस्तार करता है , तो उस फ़ंक्शन को बुलाया जाएगा।zsh_directory_nameproj:x/opt/myproj/proj/xD${(D)somevar}zsh_directory_name
यहाँ, हम प्रयोग कर रहे हैं ${(D):-}, ${:-}यह है कि ${no_var:-nothing}फैलता करने के लिए nothingकरता है, तो $no_varखाली है, इसलिए ${(D):-}जबकि बुला कुछ भी नहीं करने के लिए फैलता है zsh_directory_name। zsh_directory_nameपहले के रूप में परिभाषित किया गया है:
zsh_directory_name() {
set +o promptsubst
unset -f zsh_directory_name
unset PS1; . /path/to/file
}
है कि, पहली PS1 विस्तार (प्रथम शीघ्र पर) पर, ${(D):-}कारण होगा promptsubstविकल्प सेट नहीं होने के लिए (रद्द करने के लिए -o promptsubst), zsh_directory_name()अपरिभाषित जा करने के लिए (जैसा कि हम यह केवल एक बार चलाना चाहते हैं) $PS1को सेट किए बिना हो सकता है, और /path/to/filesourced किया जाना है।
${PS1=%m%# }फैलता है (और प्रदान $PS1करने के लिए) %m%#जब तक PS1 पहले से ही (द्वारा उदाहरण के लिए परिभाषित किया गया था /path/to/fileके बाद unset), और %m%#होता है का डिफ़ॉल्ट मान होना करने के लिए PS1।