Usando heredoc em aliases zsh

2

Eu gostaria de usar o heredoc em um zsh alias, por exemplo:

alias runthing="cd ~; date << HERE
date
HERE"

No entanto, toda vez que eu executo esse alias, o shell age como se eu não tivesse terminado o heredoc e mostrasse isso:

➜  ~ runthing
heredoc>

Digitar aqui na linha heredoc> conclui o comando, embora eu não queira fazer isso, portanto, o alias. Eu estou usando oh-my-zsh se isso está fazendo alguma diferença.

Como eu uso o heredoc corretamente em um alias do zsh?

    
por Brian Hamill 18.09.2018 / 12:16

1 resposta

2

O delimitador here doc tem que ser uma linha delimitada no alias em zsh (parece um bug quando você adiciona aquele delimitador quando pressiona enter), então:

alias runthing='cd; date << HERE
date
HERE
'

Aqui, usar um alias está errado. Considere por exemplo:

echo foo || runthing

Porque alias é apenas uma forma de substituição de texto em código (aliases é antes de todo recurso csh, csh não tinha funções), que se torna

echo foo || cd; date...

O que significa que date seria executado mesmo que echo tenha sido bem-sucedido.

É melhor você usar uma função aqui:

runthing() {
  cd && date << EOF
date
EOF
}

(claro, faz pouco sentido alimentar um heredoc para date dado que date não lê seu stdin, eu apenas suponho, foi apenas para o exemplo).

    
por 18.09.2018 / 12:47