2012-04-05 5 views

答えて

3

psqlが完了するまで、ファイルは実際にディスクから削除されません。それはディレクトリから削除されるので表示されませんが、操作が完了するまで、ファイルはディスク上に残ります(スペースを使用して)。

+0

rmがリンクを解除する前に、psqlコマンドがmyfile.sqlに対するファイルハンドルを開いたことをどのように知っていますか? –

+1

@ user1131467: 'psql'プロセスをバックグラウンドに置くには、シェルがI/Oリダイレクションを完了していなければなりません。 –

1

プロセスが現在開いているファイルを削除すると、OSはディレクトリエントリを削除しますが、ファイルを保持している最後のプロセスが閉じられるまでファイル自体をディスクに保存します。ファイルを使用しているプロセスは、何も起こっていないかのように楽しく働くことができます。

あなたのスクリプトは幸運の偶然によって動作します(シェルはリダイレクトを設定するまでファイルを削除しません)。そして、(2)psqlの使用が終了する前にファイルを削除しようとすると、 psqlが終了するまで、ファイルはディスクスペースを占有します。あなたはおそらく行うには何を意味

は次のとおりです。

(psql mydatabase < myfile.sql && rm myfile.sql) & 

このようなスポーンそれはmyfile.sqlを削除を返した後、psqlのコマンドとを実行するバックグラウンドでサブシェル、。

&&は、「左側を実行し、正常に終了した場合(読み取り:終了ステータス0を返します)」という意味です。これは一般的なシェルのイディオムです。

関連する問題