プリンタが作業を終えるまで「enscript」ブロックを待つようにするにはどうすればよいですか?

プリンタが作業を終えるまで「enscript」ブロックを待つようにするにはどうすればよいですか?

次のコマンドは、次の場所にpdfファイルを生成します~/PDF/

enscript -B -P PDF  bloom.c

出力されたPDFファイルをここに移動したいと思います。

mv "`ls -dtr1 ~/PDF/* | tail -1`" .

ただし、入力ファイルがプリンタのPDFに送信され、プリンタがpdfファイルの作成を完了する直前に返されるため、mvコマンドに従ってコマンドをすぐに実行することはできません。enscriptenscript

非常に悪い解決策は、2つのコマンドの間に次のコマンドを挿入することです。

sleep 5

いつまで待たなければならないのかわからないので迷惑です。

mv後でコマンドを実行せずに同じタスクを実行するより良い方法があることを知っていますが、プリンタがそのタスクを実行するのをやめるenscript方法があるかどうか疑問に思います。enscriptを除く他のコマンドについても同様のアイデアが思い出されますenscript。私はenscriptそのようなオプションが提供されていないと仮定しているので、bashや他のプログラムがこれを達成できるかどうかに興味があります。信号処理が解決策かもしれませんが、どの信号を捕まえるべきかわかりません。

ベストアンサー1

コメントするには大きすぎるので、~/PDFディレクトリにまだ開いているファイルがあるかどうかを確認しましたか?彼らがねじれ始めたときlsof(開いているファイルの一覧)を使って?

次のコードを後ろに追加してくださいenscript -B -P PDF bloom.c

# Go into endless loop and break when all files in */PDF/* are closed.
while :
do
    if ! [[ `lsof | grep /PDF/` ]]
    then
        break
    fi
    sleep 1
done

そして前に

mv "`ls -dtr1 ~/PDF/* | tail -1`"

これにより1秒しか無駄になります。

詳細は:

  • lsof現在開いているすべてのファイルを一覧表示します。
  • 義務はman lsofより詳細な情報を提供します。

;-)

おすすめ記事