O uso de aspas simples para atrasar a avaliação também funciona para definir aliases dinâmicos. Aqui está um alias, t
usado para anexar um novo shell a um processo existente do agente ssh, que foi iniciado com um alias chamado ssh-start
que grava o código do shell em um arquivo em um 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;`
Essa definição de t
é ruim porque faz com que novas informações de uma nova execução ssh-start
sejam ignoradas. Alterar a definição de alias de t
ser citado individualmente no meu arquivo .zshrc oferece um comportamento muito melhor:
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 a expansão da definição t
conforme fornecida por which t
, mostrando os efeitos de aspas duplas (expansão imediata imediata de comandos ou variáveis de ambiente) versus aspas simples (avaliação atrasada de comandos e variáveis).