Io-Redirection
IO-Redirection Operator 何時執行?
我對 Linux 如何處理重定向運算符有點困惑。
我的主目錄中只有一個文件:
andy$: ls demo.mp4
現在,如果我將
ls
輸出發送到文件,我應該只demo.mp4
在文件中看到,因為目錄中除了這個文件之外什麼都沒有:andy$: ls > myfile
但我實際上註意到
myfile
包含它自己!andy$ cat myfile demo.mp4 myfile <-- ???
所以這意味著在創建之後
ls
執行?myfile
就像是:
- 創造
myfile
- 列出目錄內容
ls
- 將內容(現在
myfile
存在)寫入myfile
文件因此,如果我需要排除我要重定向到的文件,我認為我應該這樣做:
ls | grep -v "myfile" > myfile
那麼首先,我說的對嗎?
如果是這樣,為什麼?我在哪裡可以找到這方面的更多資訊?
是的你是對的。
shell 在執行命令之前執行重定向。當 shell 執行命令時,它會根據需要設置新命令的標準輸入、輸出和錯誤。預設情況下,它們連接到終端(或外殼連接到的任何東西)。當存在重定向時,相關的文件描述符將連接到相應的文件(或管道等)。沒有緩衝等等——所以 shell 不會累積程序的輸出然後將其寫入文件;它將程序的輸出連接到文件並處理所有內容。
這意味著需要在執行命令之前打開文件。
您可以在關於 shell 語言的 POSIX 章節中找到更多相關資訊。第一部分列出了 shell 在執行命令之前執行的操作序列;您會看到重定向發生在命令執行之前。