Apenas um palpite, mas plausível:
evince procura através do "arquivo", o fluxo que recebe não é procurado. Compare Por que a substituição do processo BASH não funciona com alguns comandos?
Isso significa que (quase?) é impossível alcançar o que você deseja sem nenhum arquivo intermediário. O melhor que posso pensar é um script como este:
#!/bin/bash
tmpd="/dev/shm"
( tmpf="$(mktemp -p "$tmpd" "tmp [man $*] XXX.pdf")"
man -t "$@" | ps2pdf - > "$tmpf"
evince "$tmpf"
rm "$tmpf" ) 2>/dev/null &
Comentários, armadilhas, etc.:
- Quando
$tmpdé/dev/shm, um arquivo temporário é criado na memória . Eu acho que é tão perto de "sem gerar arquivos intermediários" como você pode facilmente obter, mantendo-o procurável. - Independentemente de onde esteja, devemos removê-lo depois. Se o script for interrompido (por exemplo, com Ctrl + C ) entre
mktemperm, o arquivo sobreviverá e não o queremos. Existem poucas abordagens para este problema, você podetrapsinais se quiser; Escolhi executar toda a sequência em segundo plano (( … ) &), o que pode ser bom o suficiente. - Meu
evincenão abre um arquivo de/dev/shm, a menos que seu nome termine com.pdf(esse comportamento não diferencia maiúsculas de minúsculas). É por isso que há.pdfno modelo de nome de arquivo. Não há esse problema em/tmp. Por quê? Não sei. - O modelo de nome de arquivo é criado com
$*para torná-lo um pouco significativo (exibido no título da janelaevince).