awk保持文件打開。嘗試關閉它:
echo bla | awk 'BEGIN{fname="foo.txt"}
{
print $0 >>fname
print "rm -f " fname | "/usr/bin/ksh"
close("/usr/bin/ksh")
close(fname)
print $0 >>fname
}'
awk在您第一次寫入文件時打開文件,並保持該文件處於打開狀態。當鏈接從文件系統中刪除時,awk仍然打開文件,因此它不使用「foo.txt」名稱來訪問它。通過關閉文件,您可以強制awk再次查看文件系統,並創建現在不存在的鏈接「foo.txt」。
對於讀者誰不明白的鏈接和文件之間的區別的利益,請嘗試以下操作:
$ rm -rf /tmp/foo; mkdir /tmp/foo; cd /tmp/foo # start with a clean directory
$ touch foo.txt; ln foo.txt bar.txt # Create a file with two links
$ # run original awk script (without closing the file)
$ cat bar.txt
你會看到一行「喇嘛」兩次跳回到bar.txt。原因是bar.txt
和foo.txt
都鏈接到同一個文件。 awk
打開該文件並向其寫入一行,然後刪除鏈接foo.txt
,然後將另一行寫入該文件。當awk
終止時,鏈接foo.txt
已被刪除,但該文件仍然存在,並可通過鏈接bar.txt
訪問。如果bar.txt
被刪除,那麼文件系統會注意到該文件的鏈接數已經降爲零,並且該文件將被刪除。
對我感到羞恥。你是絕對正確的。非常感謝。 – ExpertNoob