linux shell 中"2>&1"含義
http://www.cnblogs.com/caolisong/archive/2007/04/25/726896.html
為何2>&1要寫在后面?
command > file 2>&1
首先是command > file將標準輸出重定向到file中, 2>&1 是標準錯誤拷貝了標準輸出的行為,也就是同樣被重定向到file中,最終結果就是標準輸出和錯誤都被重定向到file中。
command 2>&1 >file
2>&1 標準錯誤拷貝了標準輸出的行為,但此時標準輸出還是在終端。>file 后輸出才被重定向到file,但標準錯誤仍然保持在終端。
Linux Shell 1>/dev/null 2>&1 含義 - CSDN blog
用strace可以看到:
1. command > file 2>&1
這個命令中實現重定向的關鍵系統調用序列是:
open(file) == 3
dup2(3,1)
dup2(1,2)
2. command 2>&1 >file
這個命令中實現重定向的關鍵系統調用序列是:
dup2(1,2)
open(file) == 3
dup2(3,1)
可以考慮一下不同的dup2()調用序列會產生怎樣的文件共享結構。請參考APUE 3.10, 3.12
參考:
Mac-shell 變量,數據重定向和管道
http://cnbin.github.io/blog/2015/06/02/mac-shell-bian-liang-,shu-ju-zhong-ding-xiang-he-guan-dao/