Ваша ловушка на EXIT
не выполняется специально, когда вы закрываете окно терминала или нажимаете Ctrl + C , она выполняется при выходе из оболочки.
Закрытие терминала убьет запущенную в терминале оболочку, а нажатие Ctrl + C в GhostScript завершит работу GhostScript, и, в зависимости от последующих команд, в конечном итоге также завершит работу оболочка.
Но обычный выход из GhostScript с -c quit
также в конечном итоге завершит работу оболочки, а затем выполнит ловушку.
Если вы хотите сохранить файлы, отмените ловушку после успешного выхода GhostScript.
Относительно интерактивного режима GhostScript в руководстве сказано:
The interpreter exits gracefully when it encounters the "quit" command (either in a file or from the keyboard), at end-of-file, or at an interrupt signal (such as Control-C at the keyboard).
Опция -c quit
выполнит команду quit
и тем самым завершит работу GhostScript. Вы можете выполнять произвольные команды с помощью -c
. Таким образом, вы можете просто добавить quit
к командам, которые вы передаете для преобразования, или вы можете передать команды на стандартный ввод, и GhostScript завершит работу в конце -файла -.
Редактировать
Синтаксис команды trap
:
trap [-lp] [[arg] signal_spec...]
If arg is absent (and there is a single sigspec) or -, each specified signal is reset to its original disposition
Вы всегда можете указать другое 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