우리는 보고서를 간단한 라인 프린터로 인쇄하는 오래된 Business Basic 응용 프로그램을 가지고 있으며 해당 출력을 파일로 캡처한 다음 파일에서 데이터를 긁어내고 싶습니다. Red Hat 8(2002년경)에서 실행됩니다.
기본 코드가 열리고 "LP"로 인쇄되어 lpd 프린터 lp로 이동됩니다. /var/spool/lpd/lp/에서 삭제되지 않았으며 적절한 내용이 있는 것으로 보이는 몇 가지 임의의 스풀 파일을 확인했습니다.
따라서 문제는 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:
감사해요!
답변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
또는 유사한 명령을 사용하여 수동으로 다른 인쇄 대기열로 보낼 수 있습니다.