我使用 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