Se você tiver o Pandoc instalado, o script a seguir irá recuperar seu modelo HTML, gravá-lo em um arquivo temporário, fazer alguns ajustes e então passar este arquivo como parâmetro:
template=$(mktemp default.html5.XXXXXX)
sed -z 's/<title>.*<\/title>\s*//' <<< $(pandoc -D html) >> $template
pandoc input.md -s --template $template -o output.htm
rm $template
Funciona, mas estou aprendendo a usar o Zsh de maneira eficaz e, por esse motivo, quero alterá-lo de forma que não seja necessário criar um arquivo temporário manualmente.
Pelo que eu sei, o recurso de substituição de processo Zsh cria arquivos temporários automaticamente. Por exemplo:
${template::==(pandoc -D html)}
Mas como (e se) é possível reescrever o roteiro original usando esta técnica?
=(cmd)
expande para o caminho de um arquivo temporário que contém a saídacmd
e é excluído após o comando=(cmd)
ser passado para termina.Portanto, normalmente deve ser usado em arquivos
pandoc --template =(cmd that generates a template)...
.Agora, parece que
pandoc
insiste no nome do modelo terminando na extensão do formato de saída, então seria:$TMPPREFIX
(/tmp/zsh
por padrão) e$TMPSUFFIX
(não definido por padrão) são usados para construir os nomes dos arquivos temporários=(...)
para os quais expandir.Se você deseja o caminho do arquivo temporário em uma variável, por exemplo, porque deseja usá-lo para mais de um arquivo, uma abordagem comum é passá-lo como argumento para uma função anônima. O arquivo temporário será removido após o retorno da função:
Ou um
for
loop que faz um loop apenas uma vez na expansão de=(...)
:Processando aqui todos os
.md
arquivos no diretório de trabalho atual com o mesmo arquivo de modelo temporário.Também é possível passar
=(...)
para um redirecionamento inclusive para um comando composto como em:E é aí que
${var::=value}
pode ser útil também ter o caminho desse arquivo disponível em uma variável dentro de{...}
: