Shell
如何創建具有“正常”權限的臨時文件?
在建構腳本中,我想創建一個具有唯一生成名稱的臨時文件,然後向其中寫入一些數據,然後將該文件重命名為其最終名稱(此過程的原因是我希望重命名發生(主要是)原子)。
但如果我使用
mktemp
,新文件將具有非常嚴格的權限:文件創建 u+rw,目錄 u+rwx,減去 umask 限制。
…並且這些權限將在文件重命名時保留。但是,我希望生成的文件具有“正常”權限;也就是說,它應該與
touch
由 shell 重定向或由 shell 重定向創建的文件具有相同的權限。實現這一目標的推薦方法是什麼?是否有(常見的)替代
mktemp
; 還是有一種簡單可靠的方法可以在umask
之後將文件權限更改為正常權限?
您可以
chmod =rw "$file"
在創建臨時文件後使用。GNU 手冊頁說:字母組合
ugoa
控制將更改哪些使用者對文件的訪問權限:$$ … $$如果這些都沒有給出,效果就像給出 (a) 一樣,但在 umask 中設置的位不受影響。
因此,
=rw
提供由 umask 減少的讀寫權限,類似於將0666
權限參數傳遞給open()
,這就是 egtouch filename
或echo > filename
會做的事情。這是一個POSIX 特性,所以其他實現也應該支持它。