我正在研究如何通过 ssh 打印文件。两个网站(Linux 文档项目和电脑希望) 建议使用命令“lpr”,但两者似乎都建议了两种不同的方法,没有明显的原因说明它们为什么不同或应该在不同情况下使用哪种方法。
选项1:
lpr <filename>
选项 2:
cat <filename> | lpr
我知道选项 1 只是打印文件,而选项 2 使用 cat 读取文件并将其通过管道传输到 lpr,然后打印它,但这有什么用呢?在什么情况下我应该使用其中一个,或者它们是否完全相同?(如果是这样,那么选项 1 肯定更好,因为它需要更少的打字......)
答案1
[我确实意识到我已经迟到了 6 年,但目前还没有答案,所以我想我应该尝试一下。]
使用lpr filename
,lpr 接收文件名,并负责打开该文件并读取其内容。
使用 时cat filename | lpr
,lpr 通过管道接收 stdin 上的文件内容(甚至看不到文件名)。这通常被称为“无用的 cat 使用”(UUOC,参见例如https://porkmail.org/era/unix/award)
为了避免 UUOC,有些人(包括我自己)更喜欢<filename lpr
(或等效地lpr <filename
)将 stdin 连接到文件。它类似于lpr filename
但提供了一些灵活性,例如<filename ssh some-machine lpr
用于打印到远程打印机。
答案2
很好,这个问题在这么长时间后才出现。
使用管道 有很重要的原因lpr
。 的用法cat
只能看作一个例子。
假设您有一些图像,并希望每页打印 4 张图像。如果没有管道,您必须创建一个临时文件,并确保之后将其删除。使用管道,您可以在一行中放置多个命令,而无需创建临时文件。
例如:
img2pdf pic1.png pic2.png pic3.png pic4.png | pdftops - - | psnup -4 | ps2pdf - | lpr