簡體   English   中英

為什么 sort f >f 會刪除所有內容?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM