Saya memiliki fungsi Bash untuk menampilkan halaman manual yang dibuat sebagai catatan tambahan, dalam PDF:
function psman () {
man -t "$@" | ps2pdf - /tmp/manpage.pdf
evince /tmp/manpage.pdf
}
( Pembaruan : Saya menghapus komplikasi periferal seperti secara dinamis menghasilkan nama file temp, dan menggunakan 'nohup')
Ini berfungsi dengan baik. Untuk tangkapan layar yang digunakan, lihat https://www.tartley.com/postscript-formatted-man-pages .
Untuk perbaikan saya sendiri, saya mencoba mengimplementasikannya tanpa menggunakan tempfile. Misalnya, menggunakan subtitusi proses:
$ evince <(man -t ls | ps2pdf - -)
Ini tidak bekerja Evince menampilkan kesalahan dalam GUI-nya:
Unable to open document "file:///dev/fd/63".
PDF document is damaged
Mengapa? Bagaimana saya bisa menghasilkan dan melihat PDF tanpa menghasilkan file perantara?
Pesan kesalahan di atas berbeda dari pesan yang ditampilkan untuk file yang hilang atau kosong, jadi bukan hanya itu.
Pembaruan: Untuk mendapatkan info lebih lanjut, saya mencoba mengganti 'evince' dengan 'ls':
$ ls -l <(man -t ls | ps2pdf - -)
lr-x------. 1 jhartley jhartley 64 Aug 23 08:59 /dev/fd/63 -> pipe:[196475]
tempat dircolors mewarnai:
/dev/fd/63
sebagai 'ORPHAN' (tautan simbolis yang menunjuk ke file yang tidak ada), danpipe:[196475]
sebagai 'MISSING' (file tidak ada yang diarahkan oleh tautan simbolik)
Jadi mungkin evince hanya diberi tautan yang menunjuk ke file yang tidak ada? Untuk meniru ini, saya membuat tautan simbolis yang menunjuk ke file yang tidak ada, lalu membukanya dengan 'evince'. Tetapi alih-alih pesan 'PDF rusak' di atas, ini memberi saya "Tidak ada file atau direktori."
Pembaruan: Saya pikir tipe file ORPHAN / MISSING adalah herring merah. Saya melihat symlink Orphan / MISSING yang sama ketika melakukan substitusi proses yang sangat sederhana:
$ ls -l <( echo 123 )
dan menggunakan man|ps2pdt
pipa yang sama berfungsi dengan baik ketika proses substitusi diumpankan ke diff
:
$ diff <(man -t ls | ps2pdf - - | tr "\0" "0") <(man -t ls | ps2pdf - - | tr "\0" "0")
248c248
< /ID [<95A81B38FAE8E6FE3C899586A1DEE861><95A81B38FAE8E6FE3C899586A1DEE861>]
---
> /ID [<2F9164BD9265C8540A4A8E7068076344><2F9164BD9265C8540A4A8E7068076344>]
(Di sini saya menambahkan 'tr' ke jalur pipa untuk menghilangkan karakter nol / nol dalam output pdf, sehingga diff akan memperlakukan file sebagai tekstual alih-alih biner.)
Jadi, secara ringkas, saya tidak tahu mengapa saya mendapatkan kesalahan "PDF rusak" di atas. Tujuan saya, selain memahami, adalah untuk melihat PDF yang dihasilkan tanpa menghasilkan file apa pun di sepanjang jalan.
evince <( cat man-ls.pdf )
terbuka tanpa kesalahan, menampilkan 4 halaman (nomor yang benar), tetapi semua halaman kosong. Seperti sebagian berhasil membaca file, tetapi kemudian gagal di beberapa titik.