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
mktemp
erm
, o arquivo sobreviverá e não o queremos. Existem poucas abordagens para este problema, você podetrap
sinais se quiser; Escolhi executar toda a sequência em segundo plano (( … ) &
), o que pode ser bom o suficiente. - Meu
evince
nã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á.pdf
no 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
).