mv ../* .
mv: cannot move '../<dir name>' to a subdirectory of itself, './<dir name>'
如何殼/ mv命令檢測這種行爲?
mv ../* .
mv: cannot move '../<dir name>' to a subdirectory of itself, './<dir name>'
如何殼/ mv命令檢測這種行爲?
據我所知,MV採用rename()
POSIX系統調用,爲此,規範說:
重命名()函數將失敗,如果:
(...)
[EINVAL] [CX]新目錄 路徑名包含路徑前綴 命名舊目錄。
...以及無數其他詳細的故障模式。
操作系統可能通過比較沿層次結構的中間目錄的索引節點編號,在通用VFS層實現檢測。
外殼是負責在命令行中傳遞給mv
之前擴大像*
通配符和它這樣做直接,完全基於什麼樣的文件/目錄存在,沒有它可能想做什麼節目或者是什麼的知識與這些名字。因此,在這種情況下,../*
將擴展到父目錄中的每個文件/目錄名稱,包括當前目錄<目錄名稱>。然後mv
檢查它收到的參數列表,試圖將除了最後一個以外的每一個移動到最後一個,這會導致您看到的錯誤。
那麼,它會如何知道_last_條目本身? _mv_檢查它是否試圖移動自己?` – 2011-01-26 16:52:17