나는 PDF 파일을 tif로 저장하기 위해 Ghostscript를 사용하고 있습니다. 프로세스가 중단되면 불완전한 출력 폴더를 삭제하는 작은 함수를 쉘 스크립트에 작성했습니다.
function lock-remove {
rm -r output-folder
exit
}
trap lock-remove EXIT
터미널 창을 닫거나 Ctrl+C를 누르면 기능이 실행됩니다. Ghostscript의 문제점은 프로세스가 완료된 후 ghostscript가 대화형 모드와 같은 것을 시작한다는 것입니다. 이유는 모르겠습니다. 명령 끝에 "-dBATCH" 또는 "-c quit"를 사용하면 이를 방지할 수 있습니다. 둘 다 ctrg+c 또는 터미널 창을 닫고 기능을 시작하고 출력 폴더를 삭제하는 것으로 해석됩니다.
출력을 삭제하지 않고 Ghostscript 프로세스를 완료하려면 어떻게 해야 합니까? 이 함수는 현재 주석 처리되어 있습니다.
답변1
EXIT
터미널 창을 닫거나 +를 누를 때 트랩이 실행되는 것이 아니라 쉘이 종료될 때 실행됩니다.CtrlC
터미널을 닫으면 터미널에서 실행 중인 쉘이 종료되고, GhostScript에서 Ctrl+를 누르면 CGhostScript가 종료되며, 후속 명령에 따라 결국 쉘도 종료됩니다.
그러나 GhostScript의 일반 종료는 -c quit
결국 쉘을 종료하고 트랩을 실행합니다.
파일을 보존하려면 GhostScript가 성공적으로 종료된 후 트랩을 취소하십시오.
GhostScript의 상호 작용 모드와 관련하여 설명서에는 다음과 같이 나와 있습니다.
인터프리터는 "quit" 명령(파일이나 키보드에서), 파일 끝 또는 인터럽트 신호(예: 키보드의 Ctrl-C)를 만나면 정상적으로 종료됩니다.
이 옵션은 명령 -c quit
을 실행하여 quit
GhostScript를 종료합니다. 를 사용하여 임의의 명령을 실행할 수 있습니다 -c
. 따라서 변환을 위해 전달된 명령에 추가하거나 quit
표준 입력에 명령을 제공하면 GhostScript가 파일 끝에서 종료됩니다.
편집하다
이 명령의 구문은 다음 trap
과 같습니다.
트랩 [-lp] [[arg] signal_spec ...]
arg가 존재하지 않거나(sigspec이 하나만 있는 경우) 또는 -인 경우 지정된 각 신호는 원래 구성으로 재설정됩니다.
언제든지 다른 trap
작업을 지정하거나 전혀 작업을 지정하지 않을 수 있습니다. 이 예에서는 먼저 명령을 설정 echo original trap
한 다음 echo modified trap
마지막으로 트랩을 해제하므로 쉘이 종료될 때 어떤 명령도 실행되지 않습니다.
trap 'echo original trap' exit
# run some commands
trap 'echo modified trap' exit
# run some commands
trap - exit
# run some commands
편집하다 예는 다음과 같습니다.
를 입력하면 quit
트랩이 실행되지 않습니다.
$ bash -c 'trap "echo;echo exit" exit; gsnd -q ; trap - exit'
GS>quit
$
Ctrl+를 입력 C하면 트랩이 실행됩니다.
$ bash -c 'trap "echo;echo exit" exit; gsnd -q ; trap - exit'
GS>^C
exit