的我試圖用讀/寫文件描述符在bash,這樣我可以刪除該文件描述稱這個文件後來,因爲這樣的:猛砸讀/寫文件的描述 - 尋求啓動文件
F=$(mktemp)
exec 3<> "$F"
rm -f "$F"
echo "Hello world" >&3
cat <&3
但cat
命令沒有輸出。我能達到我想要的,如果我使用的讀取和寫入單獨的文件中描述:
F=$(mktemp)
exec 3> "$F"
exec 4< "$F"
rm -f "$F"
echo "Hello world" >&3
cat <&4
它打印Hello world
。
我懷疑,當你從寫切換到讀它,下面bash和Python代碼的組合,印證了這一慶典不會自動尋求文件描述符的開始:
fdrw.sh
exec 3<> tmp
rm tmp
echo "Hello world" >&3
exec python fdrw.py
fdrw.py
import os
f = os.fdopen(3)
print f.tell()
print f.read()
這給:
$ bash fdrw.sh
12
$ # This is the prompt reappearing
有沒有一種方法可以實現我想使用bash?
爲什麼要在讀/寫之前刪除文件? – unhammer 2011-03-21 10:20:21
在Unix中,當您刪除文件時,該文件實際上並未被刪除,直到所有打開的文件描述符都被關閉。因此,打開後立即刪除一個臨時文件是很常見的做法,因爲它保證沒有其他進程可以惡意更改文件,並且在進程關閉文件或退出後文件已關閉。 – telotortium 2011-03-21 20:16:17
爲什麼你不喜歡你自己擁有分離讀寫描述符的方法?這似乎是最簡單的方法。 – Kelvin 2012-05-14 16:37:45