次のコマンドは、次の場所にpdfファイルを生成します~/PDF/
。
enscript -B -P PDF bloom.c
出力されたPDFファイルをここに移動したいと思います。
mv "`ls -dtr1 ~/PDF/* | tail -1`" .
ただし、入力ファイルがプリンタのPDFに送信され、プリンタがpdfファイルの作成を完了する直前に返されるため、mv
コマンドに従ってコマンドをすぐに実行することはできません。enscript
enscript
非常に悪い解決策は、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
より詳細な情報を提供します。
;-)