프린터가 작업을 마칠 때까지 "enscript" 블록을 기다리게 하려면 어떻게 해야 합니까?

프린터가 작업을 마칠 때까지 "enscript" 블록을 기다리게 하려면 어떻게 해야 합니까?

다음 명령은 다음 위치에 pdf 파일을 생성합니다 ~/PDF/.

enscript -B -P PDF  bloom.c

출력된 PDF 파일을 여기로 옮기고 싶습니다.

mv "`ls -dtr1 ~/PDF/* | tail -1`" .

하지만 입력 파일이 프린터 PDF로 전송되고 프린터가 pdf 파일 생성을 마치기 직전에 반환되기 때문에 mv명령에 따라 명령을 즉시 실행할 수 없습니다 .enscriptenscript

매우 나쁜 해결책은 두 명령 사이에 다음 명령을 삽입하는 것입니다.

sleep 5

언제까지 기다려야 할지 모르기 때문에 짜증납니다.

mv나중에 명령을 실행 하지 않고도 동일한 작업을 수행할 수 있는 더 좋은 방법이 있다는 것을 알고 있지만 프린터가 해당 작업을 수행하는 것을 enscript중지할 수 있는 방법이 있는지 궁금합니다 . enscript를 제외한 다른 명령에 대해서도 비슷한 아이디어가 기억납니다 enscript. 나는 enscript그러한 옵션이 제공되지 않는다고 가정하고 있으므로 bash나 다른 프로그램이 이를 달성할 수 있는지에 관심이 있을 것입니다. 신호 처리가 해결책일 수도 있지만 어떤 신호를 잡아야 할지 모르겠습니다.

답변1

댓글을 달기에는 너무 크므로 ~/PDF디렉토리에 아직 열려 있는 파일이 있는지 확인해 보셨나요?그들이 꼬이기 시작할 때lsof(열린 파일 나열)을 사용하여 ?

다음 코드 조각을 뒤에 추가하세요 enscript -B -P PDF bloom.c.

# Go into endless loop and break when all files in */PDF/* are closed.
while :
do
    if ! [[ `lsof | grep /PDF/` ]]
    then
        break
    fi
    sleep 1
done

그리고 전에

mv "`ls -dtr1 ~/PDF/* | tail -1`"

이렇게 하면 1초만 낭비됩니다...

자세한 내용은:

  • lsof현재 열려 있는 모든 파일을 나열합니다.
  • 의무는 man lsof더 자세한 내용을 제공할 것입니다.

;-)

관련 정보