以下命令非常适合从命令行查看 pdf 内容:pdftohtml -i -stdout file.pdf |elinks
。应该清楚的是,发生的情况是 file.pdf 被转换为 html,然后通过管道传输到文本模式浏览器elinks
进行显示。
但我希望做的是对此略有不同。我想使用elinks
'-remote
开关将pdftohtml
命令的输出发送到已运行的elinks
.其工作方式如下,使用 URL 而不是命令的输出作为示例:elinks
在一个终端中启动,然后像在另一个终端中一样运行命令elinks -remote www.google.com
,将导致在正在运行的elinks
实例中打开一个新选项卡,显示谷歌搜索页面。
到目前为止,我还无法获得这样的命令来处理pdftohtml
命令的输出。最直接的方法似乎是pdftohtml -i -stdout file.pdf |elinks -remote
。但根据我迄今为止的实验,这不起作用,因为 -remote 开关显然需要提供 URL 或文件名(“无法解析选项 -remote:预期参数”)。
所以我的问题是是否有某种方法可以动态“馈送” pdftohtml
to的输出?elinks -remote
意见将不胜感激。
到目前为止尝试过的事情
我想也许命名管道可以在这里提供帮助,但该选项不起作用。尽管类似的事情pdftohtml -i file.pdf my-pipe && elinks <my_pipe
成功了,但当我添加 -remote 开关时,它失败了。
到目前为止,我已经接近我的目标的拼凑是
pdftohtml -i file.pdf /tmp/pdf.html && elinks -remote /tmp/pdf.html && elinks -remote "reload()"
这会在 /tmp 目录中创建一个过渡文件,该文件被证明可以接受 -remote 开关。需要重新加载页面,以便不会显示浏览器之前可能缓存的任何其他过渡打开页面/文件。这并不是一个很好的解决方案,因为当我尝试重新加载之前可能已打开过渡页面/文件的任何其他选项卡时,将加载该页面/文件的最新副本,而不是之前打开的副本。
解决?
再加上进一步的拼凑,这里有一个带注释的 bash 脚本(我称之为 pdf2elinks),我利用自己作为互联网搜索者的微薄能力和作为精英复制/粘贴者的专业知识拼凑而成,解决了pdftohtml
由被后续文件覆盖,因此在充分审查之前丢失。显而易见,我决定为转换后的过渡 html 文件分配数字而不是名称,这将提供一种自动分配唯一名称的方法。还可以清楚的是,如果系统未设置为/tmp
在重新启动时自动清除目录内容,则需要cron
定期清空正在写入过渡 html 文件的目录(例如,通过使用脚本)。
#!/bin/bash
# use: pdf2elinks [filename]
# read the name of the pdf supplied to this script into a variable
pdfname=$1
# test whether the target directory is empty and, if it is, convert the supplied pdf under the name 1.html
if [ ! "$(ls -A /tmp/pdfs2html)" ]; then
pdftohtml -i $pdfname /tmp/pdfs2html/1.html && elinks -remote /tmp/pdfs2html/1.html
else
# if the directory is not empty, find the highest numbered file in /tmp/pdfs2html
number=`ls /tmp/pdfs2html/ | sed 's/\([0-9]\+\).*/\1/g' | sort -n | tail -1`
# increment by one the highest numbered file found
numberplus=`echo "$number +1" | bc`
pdftohtml -i $pdfname /tmp/pdfs2html/$numberplus.html && elinks -remote /tmp/pdfs2html/$numberplus.html
fi
最后,这个尝试用作elinks
寻呼机的项目的灵感来自于这个页面:
http://www.pocketnix.org/posts/Life%20on%20the%20command%20line%3A%20Day%20To%20Day%20Console。与该作者一样,我经常在运行的 ssh 会话中通过命令行与我的一台计算机进行交互tmux
。其中一个选项卡将始终elinks
在其中运行,它将充当一个窗口,我可以在其中打开电子邮件附件(例如 pdf)、阅读手册页或只是打开网页。上面脚本的路径已添加到我的 .mailcap 条目中,用于处理 pdf,并且似乎可以很好地执行其功能。
我欢迎提出意见、建议、改进和/或更正。我不抱任何幻想,认为我已经找到了我试图解决的问题的最佳解决方案,甚至我已经很好地理解了哪些问题真正处于危险之中。