看板 Linux 關於我們 聯絡資訊
command >file 2>&1 command 2>&1 >file 不懂為什麼不同. 第一個是標準輸出資料流往file走 然後把錯誤輸出導向標準輸出 因此最後會 在檔案先印標準輸出 接著印錯誤輸出 第二個 論理來說 應該是錯誤輸出導向標準輸出 接著標準輸出會導向file去 結果 應該會跟上面一樣 但是真正的執行結果卻是file只有標準輸出 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.152.113 ※ 文章網址: http://www.ptt.cc/bbs/Linux/M.1416190207.A.EB8.html
bitlife: 你把>看成值的指定就懂了,因為它本質是dup2這個系統呼叫 11/17 11:06
理解了, 感謝. COMMAND >file 2>&1 的步驟就是 先把file寫到1(stdout)的fd內容內 然後把 1(stdout)的fd內容覆蓋給2: 1 stdout -> file -> file 2 stderr -> stderr -> file n file -> file -> file COMMAND 2>&1 >file則是: 1 stdout -> stdout -> file 2 stderr -> stdout -> stdout n file -> file -> file 於是結果就變成一般輸出寫到file內 但是錯誤輸出則出現在stdout(銀幕)中 不曉得這樣理解對不對? ※ 編輯: NTUHensen (118.166.152.113), 11/17/2014 12:51:45
bitlife: 意思差不多,但最好的理解應該是把fd1,fd2,fdn看成是指標, 11/17 13:14
bitlife: 本來fd1(標準輸出)指向console(or tty)輸入,fd2也是,標題 11/17 13:15
bitlife: 的行為是先把fd2指向原來fd1指的地方(console or tty),然 11/17 13:15
bitlife: 後把fd1指向fdn所指的地方(也就是file) 11/17 13:15
bitlife: 輸出 (更正錯字) 11/17 13:16
bitlife: 除非fd1本已指向非console/tty output,否則這標題實用性 11/17 13:17
bitlife: 不大(因為stderr操作前後不變),比較像考題 11/17 13:18