Використання єдиної цитати для затримки оцінювання працює і для визначення динамічних псевдонімів. Ось псевдонім, який t
використовується для приєднання нової оболонки до існуючого процесу агента ssh, який був запущений з псевдонімом, який називається, ssh-start
який записує код оболонки до файлу в homedir:
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
, показуючи ефекти подвійних лапок (негайне розширення на місці команд або змінних середовища) проти одиничних лапок (затримка оцінки команд та змінних).