"-c quit"または-dBATCHを使用せずにGhostscriptを閉じます。

私は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+を押すとCG​​hostScriptが終了し、その後のコマンドに従って最終的にシェルも終了します。

しかし、GhostScriptの通常のシャットダウンは-c quit最終的にシェルをシャットダウンし、トラップを実行します。

ファイルを保存するには、GhostScriptが正常に終了した後にトラップをキャンセルします。

GhostScriptの対話モードに関しては、ドキュメントには次のように記載されています。

インタプリタは、「quit」コマンド(ファイルまたはキーボードから)、ファイルの終わり、または割り込み信号(キーボードのCtrl-Cなど)に遭遇すると正常に終了します。

このオプションはコマンド-c quitを実行してquitGhostScriptを終了します。を使用して任意のコマンドを実行できます-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

おすすめ記事