私はスティーブンジッターの言葉を理解しようとしています。回答この問題を解決するために、彼は次のコードを使用して一時ディレクトリを作成しました。
#!/bin/bash
scripttmp=$(mktemp -d) # Create a temporary directory (these will usually be created under /tmp or /var/tmp/)
このコマンドを実行するたびに、以下に新しい一時ディレクトリが作成されることがわかります。/tmp/
(Roaimaの答えを読むまでそこにいるとは知りませんでした)ここ):
IIUCでは、通常のディレクトリと一時ディレクトリの間にプログラミング上の違いはありません(唯一の違いは、これらのディレクトリの使用方法、つまり各ディレクトリがコンピュータに保持される期間です)。
手続き上の違いがなければ、人々はなぜmktemp -d
最も小さいものを好むのでしょうかmkdir
。
答え1
を使用する場合、mkdir
スクリプトは名前で作成したディレクトリがすでに存在しないことを確認する必要があります。現在のディレクトリに既存の名前があるmkdir dirname
場合、それを使用するとエラーが発生します。dirname
一時ディレクトリ(つまり、現在のスクリプトより長く続く不要なディレクトリ)を作成すると、通常、ディレクトリ名は重要ではなく、まだmktemp -d
他の名前が使用されていない名前が見つかります。
mktemp -d
一時ディレクトリをより簡単で安全にすることができます。そうでない場合は、成功するまで複数の名前をmktemp -d
試してください。mkdir
これは不必要に複雑であるだけでなく、誤って実行される可能性があります(コードに微妙な競合状態が生じる可能性があります)。
mktemp
また、スクリプトユーザーに一時ディレクトリを作成する場所を制御する権限を付与します。たとえば、スクリプトがそのディレクトリに格納する必要がある大量の一時データを生成する場合、ユーザーは十分な空き領域を持つパーティションの書き込みTMPDIR
可能ディレクトリを指すように環境変数(スクリプト呼び出し前または呼び出し時)を設定できます。 。スペース。mktemp -d
これにより、そのパスの下に一時ディレクトリが作成されます。
TMPDIR
設定しないと、代わりにmktemp
使用されます/tmp
。
答え2
任意の名前で一時ディレクトリを作成するので、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