Lpd
將 lpd lp 重定向到文件?
我們有一個古老的 Business Basic 應用程序,它將報告列印到一個簡單的行式列印機,我們希望將該輸出擷取到一個文件中(然後從中刮取數據)。這在 Red Hat 8(大約 2002 年)上執行。
基本程式碼 OPEN 然後列印到“LP”,它進入 lpd 列印機 lp。檢查幾個在 /var/spool/lpd/lp/ 中沒有被刪除的隨機假離線文件,這些文件看起來有合適的內容。
所以問題是,如何臨時更改某些內容,使 Basic 程序僅將其輸出發送到文件(並且該文件不會被列印)。
可以通過修改Basic程式碼來達到這個效果,但是系統範圍很廣,列印的地方很多,在這些地方沒有簡單的方法可以提供選項。
因此,尋求一種在 Basic 應用程序之外執行此操作的方法,該方法可以從腳本中設置和取消設置(使列印恢復正常)。
如果它是相關的,printcap 條目:
lp:\ :ml#0:\ :mx#0:\ :sd=/var/spool/lpd/lp:\ :af=/var/spool/lpd/lp/lp.acct:\ :sh:\ :rm=[ip address]:\ :rp=pr0:\ :lpd_bounce=true:\ :if=/usr/share/printconf/util/mf_wrapper:
謝謝!
如果您將
printcap
條目定義為:lp:\ :ml#0:\ :mx#0:\ :sd=/var/spool/lpd/lp:\ :sh:\ :lp=/dev/null:\ :of=/var/output/capture:
在這種情況下,
lp
入口指向/dev/null
,所以它永遠不會列印出任何東西。魔法就在
of
過濾器中。這是一個非常簡單的腳本:#!/bin/sh DIR=/var/output/files d=`/bin/date +%Y-%m-%d_%H:%M:%S` output=$DIR/$d.$$ cat > $output chmod 644 $output exit 0
現在
mkdir /var/output/files chown daemon /var/output/files
此時我們可以執行以下操作:
% echo this is a test | lpr
如果是魔法:
% ls /var/output/files 2016-08-20_09:44:19.26541 % cat /var/output/files/2016-08-20_09\:44\:19.26541 this is a test
您可以根據您的確切需要修改腳本。
(我已經在 FreeBSD 上對此進行了測試,這是我唯一仍在使用的機器
lpd
!)現在您
if
的原始文件中有一個過濾器;if
是一個“輸入過濾器”,旨在將傳入文件修改為規範化格式。我不確定是什麼mf_wrapper
(“m 格式”?),但如果您在輸出文件中看到一團糟,那麼您可能會更改printcap
以包含原始if
過濾器:lp:\ :ml#0:\ :mx#0:\ :sd=/var/spool/lpd/lp:\ :sh:\ :lp=/dev/null:\ :of=/var/output/capture:\ :if=/usr/share/printconf/util/mf_wrapper:
對於您滿意的文件,您可以手動將它們發送到另一個帶有
lpr -Prealqueue
或類似的列印隊列。