[英]Why sort f >f will delete everything?
我想對一個名為f
文件進行排序,然后可以將文件排序后的答案存儲回 f:
sort f >f
但是這個命令以一個空文件f
,為什么? 以及如何使用一個命令來實現我的目標,而不是這樣做:
sort f >1
mv 1 f
shell在調用sort
命令之前創建輸出文件。 (它必須這樣做;否則它將無法重定向sort
命令的標准輸出。)所以當sort
命令開始以f
作為參數運行時, f
是一個空文件。
您可以通過使用-o
選項來避免這種情況:
sort -o f f
這會導致sort
程序自己創建的輸出文件f
它開始讀取輸入文件之前f
。 由於文件創建在類 Unix 系統上的工作方式,輸入f
和輸出f
實際上是兩個不同的文件。
正如sort
的 POSIX 規范所說:
-o輸出
指定要使用的輸出文件的名稱,而不是標准輸出。 該文件可以與輸入文件之一相同。
因為>
通過截斷它來創建一個新文件。 在sort f
命令運行之前,它首先由 shell 完成。
因為 shell 必須在運行sort
之前設置重定向(通過調用dup2
並創建一個新文件)
你可以定義一些函數
autosort() {
mv $1 "$1.tmp$$"
sort "$1.tmp$$" > $1
}
然后使用autosort f
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.