Directory

使用 mktemp -d 或 mkdir 創建的目錄之間是否存在程式差異?

  • September 26, 2018

我試圖理解 Stephen Kitt 對這個問題的回答,他用以下程式碼創建了一個臨時目錄:

#!/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呢?

使用mkdir時,腳本必須確保它創建一個名稱尚不存在的目錄。mkdir dirname如果dirname是目前目錄中的現有名稱,則使用將是錯誤的。

當創建一個臨時目錄(即一個在目前腳本的生命週期內不需要的目錄)時,目錄的名稱通常並不重要,並且mktemp -d會找到一個尚未被其他東西佔用的名稱。

mktemp -d使創建臨時目錄更容易、更安全。如果沒有mktemp -d,則必須嘗試mkdir使用多個名稱,直到其中一個成功。這既不必要地複雜,也可能做錯(可能在程式碼中引入微妙的競爭條件)。

mktemp還為腳本使用者提供了一些控制權,他們希望在哪裡創建臨時目錄。例如,如果腳本產生大量必須儲存在該目錄中的臨時數據,則使用者可以將TMPDIR環境變數(在呼叫腳本之前或呼叫腳本時)設置為指向分區上的可寫目錄,其中有足夠的可用空間。mktemp -d然後將在該路徑下創建臨時目錄。

如果TMPDIR未設置,mktemp/tmp在其位置使用。

引用自:https://unix.stackexchange.com/questions/471589