2008-10-05 130 views
3

我寫了一個簡短的bash腳本來完成一項任務,該任務涉及創建一個臨時目錄並在其中存儲各種文件並對其執行各種操作。訪問/ tmp /時拒絕創建臨時文件的位置?

在我的第一遍中,我只是在/tmp/$$.$script創建了臨時目錄「,但後來我在計算機上測試了腳本,在那裏我沒有對/ tmp /的寫入權限,所以我的問題是這個temp目錄的好位置在哪裏?我應該只使用當前目錄嗎?主目錄?〜/ tmp /?腳本的輸出位置?

創建的所有文件都得到清理的腳本退出。

回答

7

許多系統也有一個/var/tmp。如果系統管理員不想讓你寫入/tmp,想必他們已經提供了一些替代方案......是$TMPDIR環境變量集?舉例來說,在我的Mac:

$ echo $TMPDIR 
/var/folders/jf/jfu4pjGtGGGkUuuq8HL7UE+++TI/-Tmp-/ 
+0

不幸的是,這臺特定的計算機沒有TMPDIR設置,但我想我會添加一個檢查作爲可能的寫入位置。謝謝。 – 2008-10-05 20:22:12

1

你可以嘗試/var/tmp,但很可能是/tmp是一個符號鏈接到(或反之亦然)。

+0

在這種特殊情況下,我確實可以訪問/ var/temp,所以這就是我要做的。謝謝。 – 2008-10-05 20:20:04

5

我建議〜/ [腳本名稱]/tmp目錄,如果沒有設置TMPDIR,而不是〜/ tmp目錄/的,因爲用戶可能已經創建了自己。 (並且你可能不想意外地覆蓋那裏的東西)。

就像一個即興想在bash -

case $TMPDIR in '') tmp_dir=".${0}/tmp";; *) tmp_dir=$TMPDIR;; esac 
4

使用$ {TMPDIR: -/tmp目錄}($ TMPDIR或/ tmp目錄,如果$ TMPDIR沒有設置)。如果這不是可寫的,那麼退出時會出現這樣的錯誤,或者要求用戶輸入定義它。我想問問用戶臨時文件應該去哪裏比假設某個地方更好,如果你的進程被殺死了,就把它們留在那裏。

2

你可以嘗試使用mktemp(假設它是正確配置的系統)

例如 MYTMPDIR=$(mktemp -d)