Directory
使用 mktemp -d 或 mkdir 創建的目錄之間是否存在程式差異?
我試圖理解 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
在其位置使用。