Stephen Kittの answer が、次のコードで一時ディレクトリを作成したこの質問を理解しようとしています。
#!/bin/bash
scripttmp=$(mktemp -d) # Create a temporary directory (these will usually be created under /tmp or /var/tmp/)
このコマンドを実行するたびに、/tmp/
の下に作成された新しい一時ディレクトリが表示されます(Roaimaの回答を読むまでそこに表示されるとは知りませんでした ここ ):
IIUCでは、通常のディレクトリと一時ディレクトリの間にプログラム上の違いはありません(唯一の違いは、各ディレクトリがマシンにとどまる時間による、これらのディレクトリの使用方法です)。
プログラム上の違いがない場合、より最小限のmkdir
よりもmktemp -d
を好むのはなぜですか?
mkdir
を使用する場合、スクリプトは、まだ存在していない名前のディレクトリを作成することを確認する必要があります。 dirname
が現在のディレクトリに存在する名前である場合、mkdir dirname
を使用するとエラーになります。
一時ディレクトリ(つまり、現在のスクリプトの存続期間よりも長く必要とされないディレクトリ)を作成する場合、ディレクトリの名前は一般的に重要ではなく、mktemp -d
はまだ使用されていない名前を見つけます。他の何かによって。
mktemp -d
を使用すると、一時ディレクトリを簡単かつ安全に作成できます。 mktemp -d
がないと、成功するまで複数の名前でmkdir
を試行する必要があります。これは不必要に複雑であり、間違って実行される可能性があります(コードに微妙な競合状態が発生する可能性があります)。
mktemp
はまた、スクリプトのユーザーに、一時ディレクトリを作成する場所を少し制御できるようにします。たとえば、スクリプトがそのディレクトリに格納する必要のある大量の一時データを生成する場合、ユーザーはTMPDIR
環境変数(スクリプトを呼び出す前または呼び出すときに)を設定して、十分なスペースが利用可能なパーティション上の書き込み可能なディレクトリ。 mktemp -d
は、そのパスの下に一時ディレクトリを作成します。
TMPDIR
が設定されていない場合、mktemp
は代わりに/tmp
を使用します。
_mktemp -d
_はランダムな名前で一時ディレクトリを作成するため、次のようになります。厳密な一時ディレクトリ削除ポリシーがある場合は、使用後にディレクトリを削除することを忘れないでください。
これが、値を保持するためにscripttmp=$(mktemp -d)
を記述した理由です。一般的には使いやすいです。
気にしない限り、この小さな例を使用してランダムな名前を生成し、後でフォルダーを削除できます。
_var=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1);
mkdir "/tmp/$var"
#some code
rm -rf "/tmp/$var"
_
Mktemp -dまたはmkdirで作成されたディレクトリ間にプログラム上の違いはありますか?
あります。 mkdir
を使用してディレクトリ名を生成し、_mktemp -d
_を使用すると、システムは_/dev/urandom
_ gettimeofday
、getpid
、.に基づいてディレクトリを作成します。 。および名前の一意性を取得するための他の関数。