2>&1是什麼意思?
0 stdin,1 stdout,2 stderr
2>&1應該分成兩個部分來看,一個是2>以及另一個是&1,
其中2>就是将标準出錯重定向到某個特定的地方;&1是指無論标準輸出在哪裡。
是以2>&1的意思就是說無論标準出錯在哪裡,都将标準出錯重定向到标準輸出中。
有時候希望将錯誤的資訊重新定向到輸出,就是将2的結果重定向至1中就有了”2>1”這樣的思路,如果按照上面的寫法,系統會預設将錯誤的資訊(STDERR)2重定向到一個名字為1的檔案中,而非所想的(STDOUT)中。是以需要加&進行區分。就有了 2>&1 這樣的用法
| 管道
管道的作用是提供一個通道,将上一個程式的标準輸出重定向到下一個程式作為下一個程式的标準輸入。
通常使用管道的好處是一方面形式上簡單,另一方面其執行效率要遠高于使用臨時檔案。
這裡使用管道的目的是将make程式的輸出重定向到下一個程式,其最終目的是用來将輸出log存入檔案中。
tee是用來幹什麼的?
tee從标準輸入中讀取,并将讀入的内容寫到标準輸出以及檔案中。
是以這裡tee指令的作用是将資料讀入并寫到标準輸出以及log.txt中。
之是以要将編譯産生的log儲存到log.txt中,其原因是你的标準輸出的緩存可能是有限制的,而你編譯程式産生的log可能會很多,這樣很可能會造成log不完整;
其目的是當程式發生編譯錯誤的時候,我們可以從log.txt中看到完整的編譯log,這樣友善查找編譯錯誤。