关闭 Ghostscript 而不使用“-c quit”或 -dBATCH

关闭 Ghostscript 而不使用“-c quit”或 -dBATCH

我使用 Ghostscript 将 pdf 文件另存为 tif。我在 shell 脚本中编写了一个小函数,用于在中止进程时删除不完整的输出文件夹。

function lock-remove {
 rm -r output-folder
exit
}
trap lock-remove EXIT

当我关闭终端窗口或按下ctrg+c 时,该函数正在运行。 Ghostscript 的问题是,在该过程完成后,ghostscript 会启动类似交互模式的东西。我不知道为什么。我可以在命令末尾使用“-dBATCH”或“-c quit”来防止这种情况。这两者都被解释为 ctrg+c 或关闭终端窗口,并启动该功能并删除输出文件夹。

我怎样才能完成 Ghostscript 过程而不删除输出。目前该函数已被注释掉。

答案1

当您关闭终端窗口或按+时,您的陷阱EXIT不会专门执行,而是在 shell 退出时执行。CtrlC

关闭终端将终止在终端中运行的 shell,在 GhostScript 中按Ctrl+C将终止 GhostScript,并且根据后面的命令最终也将终止 shell。

但是 GhostScript 的常规退出-c quit最终也会终止 shell,然后执行陷阱。

如果要保留文件,请在 GhostScript 成功退出后取消陷阱。

关于GhostScript的交互方式,手册上说:

当解释器遇到“quit”命令(在文件中或从键盘中)、文件末尾或中断信号(例如键盘上的 Control-C)时,它会正常退出。

该选项-c quit将执行该quit命令并因此终止 GhostScript。您可以使用 执行任意命令-c。因此,您可以附加quit到为转换传递的命令,或者您可以在标准输入上提供命令,GhostScript 将在文件末尾终止。

编辑

该命令的语法trap

trap [-lp] [[arg] signal_spec ...]

如果 arg 不存在(并且只有一个 sigspec)或 -,则每个指定的信号将重置为其原始配置

您始终可以指定其他trap操作,或不指定任何操作。此示例将首先设置 command echo original trap,然后echo modified trap最后取消陷阱,以便 shell 退出时不会执行任何命令。

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

相关内容