Files
將一個文件重定向到另一個文件是UUOC(無用的cat)嗎?
如果我想讓 的內容
file2
與 的內容相匹配file1
,我顯然可以執行cp file1 file2
.但是,如果我想保留除內容
file2
之外的所有內容 — 所有者、權限、擴展屬性、ACL、硬連結等,那麼我不想執行cp
.* 在這種情況下,我只想撲通一聲中file1
的內容file2
。似乎以下內容會做到這一點:
< file1 > file2
但它不起作用。
file2
被截斷為空而不被寫入。然而,cat < file1 > file2
確實有效。
令我驚訝的是,第一個版本不起作用。
第二個版本是UUOC嗎?有沒有辦法在不呼叫命令的情況下僅通過使用重定向來做到這一點?
注意:我知道 UUOC 與其說是真正的反模式,不如說是一個迂腐的觀點。
*正如tniles09 發現的
cp
那樣,實際上在這種情況下可以工作。
cat < file1 > file2
不是UUOC。經典地,<
並>
在系統級別執行與文件描述符重複相對應的重定向。文件描述符重複本身不會做任何事情(嗯,>
重定向打開O_TRUNC
,所以準確地說,輸出重定向會截斷輸出文件)。不要讓<
>
符號混淆你。重定向不移動數據——它們將文件描述符分配給其他文件描述符。在這種情況下,您打開
file1
該文件描述符並將其分配給文件描述符0
(<file1
==0<file1
)並將file2
該文件描述符分配給文件描述符1
(>file2
==1>file2
)。現在您已經有了兩個文件描述符,您需要一個在兩者之間鏟取數據的程序——這就是
cat
目的。