[問題] 2&1 >file

看板Linux作者 (搖滾人)時間11年前 (2014/11/17 10:10), 11年前編輯推噓1(107)
留言8則, 1人參與, 最新討論串1/2 (看更多)
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

11/17 11:06, , 1F
你把>看成值的指定就懂了,因為它本質是dup2這個系統呼叫
11/17 11:06, 1F
理解了, 感謝. 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

11/17 13:14, , 2F
意思差不多,但最好的理解應該是把fd1,fd2,fdn看成是指標,
11/17 13:14, 2F

11/17 13:15, , 3F
本來fd1(標準輸出)指向console(or tty)輸入,fd2也是,標題
11/17 13:15, 3F

11/17 13:15, , 4F
的行為是先把fd2指向原來fd1指的地方(console or tty),然
11/17 13:15, 4F

11/17 13:15, , 5F
後把fd1指向fdn所指的地方(也就是file)
11/17 13:15, 5F

11/17 13:16, , 6F
輸出 (更正錯字)
11/17 13:16, 6F

11/17 13:17, , 7F
除非fd1本已指向非console/tty output,否則這標題實用性
11/17 13:17, 7F

11/17 13:18, , 8F
不大(因為stderr操作前後不變),比較像考題
11/17 13:18, 8F
文章代碼(AID): #1KQLZ_wu (Linux)
討論串 (同標題文章)
文章代碼(AID): #1KQLZ_wu (Linux)