Использование одинарной кавычки для задержки оценки работает и для определения динамических псевдонимов. Вот псевдоним, 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
, показывающее влияние двойных кавычек (немедленное расширение на месте команд или переменных среды) по сравнению с одинарными кавычками (отложенная оценка команд и переменных).