2010-01-14 23 views
0

更換文件中使用「之類的x.txt> x.txt」爲什麼說「之類的x.txt> x.txt」清除文件的內容,但「排序x.txt> y.txt」寫道:排序文件y.txt如你所願Cygwin中

+1

這是有關的bash shell腳本。我不確定共識是什麼,但是這對於superuser.com可能更好,因爲它不是關於編程本身。 –

+0

這不是cygwin的具體行爲... –

+0

我不確定你的意思是「如你所料」。如果您發出截斷它的命令,我希望x.txt爲空。 –

回答

1

在調用命令sort x.txt之前,shell會截斷x.txt,因此排序命令運行時沒有任何可排序的內容。

幾乎所有的殼這樣的行爲(包括Windows CMD窗口);它不僅僅是Cygwin的一個特色。

1

當您運行的命令,你就相當於告訴外殼打開x.txt寫(>>將被追加,這將是不同的),然後將「sort x.txt」的結果轉儲到它中 - 它剛剛發生,因爲它打開文件進行寫入,首先,它有效地啓動一個名爲x.txt的新文件,然後執行排序x.txt,排序一個空文件。

我不是積極的,爲什麼時機,因爲它是 - 但我相信它可以讓你從試圖運行一個命令寫入到一個文件你沒有寫權限等。(又名 - 它打開它寫,首先,以確保它可以)。

0

sort a > b開放A和B具有共同的閱讀和b進行寫入。作爲寫作b,它將被清除。

0

當執行命令時,首先殼的打開輸出文件將輸出寫入方案,它有效地截斷爲長度爲零。然後它啓動排序命令,並在sort x.txt > x.txt這種情況下,這新排空文件x.txt

0

當shell看到它看到sort命令的輸出需要將進入文件x.txt命令sort x.txt > x.txt,所以它打開文件x.txt寫入,這將清除出該文件的內容,如果文件已經有了任何東西。

如果你想避免它,你可以重定向排序輸出到一個臨時文件,並稍後重命名臨時文件x.txt