私は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が1つのみ)、または-の場合、指定された各信号は元の構成にリセットされます。
いつでも他の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