我々は、レポートを単純なラインプリンタに印刷する古いBusiness Basicアプリケーションを持っており、その出力をファイルにキャプチャしてからファイルからデータを掻き取りたいと思います。 Red Hat 8(2002年頃)で動作します。
ベースコードが開き、「LP」として印刷され、lpdプリンタlpに移動します。 /var/spool/lpd/lp/から削除されておらず、適切な内容があるように見えるいくつかのランダムスプールファイルを確認しました。
したがって、問題は、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:
ありがとうございます!
答え1
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
または同様のコマンドを使用して手動で別の印刷キューに送信できます。