連線檔案
眾所周知,你不能在同一命令中使用相同的檔案進行輸入和輸出。例如,
$ cat header.txt body.txt >body.txt
不做你想做的事。當 cat
讀取 body.txt
時,它已經被重定向截斷並且它是空的。最終的結果是 body.txt
只能儲存 header.txt
的內容*。*
人們可能會想到通過程序替換來避免這種情況,即命令
$ cat header.txt <(cat body.txt) > body.txt
在檔案被重定向截斷之前,會強制 body.txt
的原始內容以某種方式儲存在某個緩衝區中。它不起作用。括號中的 cat
僅在設定了所有檔案描述符後才開始讀取檔案,就像外部檔案描述符一樣。在這種情況下嘗試使用程序替換沒有意義。
將檔案新增到另一個檔案的唯一方法是建立一箇中間檔案:
$ cat header.txt body.txt >body.txt.new
$ mv body.txt.new body.txt
當使用“ 就地編輯” 選項(通常是 -i
) 呼叫時,sed
或 perl
或類似程式在地毯下執行的操作。