El uso de una comilla simple para retrasar la evaluación también funciona para definir alias dinámicos. Aquí hay un alias, t
utilizado para adjuntar un nuevo shell a un proceso de agente ssh existente, que se inició con un alias llamado ssh-start
que escribe el código de shell en un archivo en un 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;`
Esa definición de t
es mala porque hace ssh-start
que se ignore la información nueva de una nueva ejecución . Cambiar la definición de alias de t
ser citado individualmente en mi .zshrc proporciona un comportamiento mucho mejor:
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`
Observe la expansión de la definición de t
como se proporciona which t
, mostrando los efectos de las comillas dobles (expansión inmediata en el lugar de comandos o variables de entorno) frente a comillas simples (evaluación retrasada de comandos y variables).