→ 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