गतिशील उपनामों को परिभाषित करने के लिए मूल्यांकन में देरी के लिए एकल-उद्धरण का उपयोग करना। यहां एक उपनाम है, t
जिसका उपयोग मौजूदा ssh एजेंट प्रक्रिया में एक नया शेल संलग्न करने के लिए किया जाता है, जिसे एक उपनाम के साथ शुरू किया गया था, जो ssh-start
एक होमडियर में एक फ़ाइल में शेल कोड लिखता है:
mymistress:~> which ssh-start
ssh-start: aliased to eval `ssh-agent | tee ~/.ssh/ssh-agent.out` ; ssh-add ~/.ssh/id_rsa
mymistress:~> grep "alias t" .zshrc
alias t="eval `cat ~/.ssh/ssh-agent.out`"
mymistress:~> which t
t: aliased to eval SSH_AUTH_SOCK=/tmp/ssh-nZBZp29804/agent.29804; export SSH_AUTH_SOCK;\nSSH_AGENT_PID=29805; export SSH_AGENT_PID;\necho Agent pid 29805;`
यह परिभाषा t
खराब है क्योंकि यह नए सिरे से नई जानकारी को ssh-start
नजरअंदाज करने का कारण बनता है। t
मेरे .zshrc में एकल रूप से उद्धृत की जाने वाली उपनाम की परिभाषा को बदलना बेहतर व्यवहार देता है:
mymistress:~> grep "alias t" .zshrc
alias t='eval `cat ~/.ssh/ssh-agent.out`'
mymistress:~> source ~/.zshrc
mymistress:~> which t
t: aliased to eval `cat ~/.ssh/ssh-agent.out`
दोहरे उद्धरण चिह्नों के प्रभाव (कमांड या पर्यावरण चर के तत्काल स्थान पर विस्तार) बनाम एकल उद्धरण (आदेशों और चर का विलंबित मूल्यांकन) दिखाते हुए, के t
रूप में प्रदान की गई परिभाषा के विस्तार पर ध्यान दें which t
।