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_name
proj:x
/opt/myproj/proj/x
D
${(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/file
sourced किया जाना है।
${PS1=%m%# }
फैलता है (और प्रदान $PS1
करने के लिए) %m%#
जब तक PS1 पहले से ही (द्वारा उदाहरण के लिए परिभाषित किया गया था /path/to/file
के बाद unset
), और %m%#
होता है का डिफ़ॉल्ट मान होना करने के लिए PS1
।