"ls >foo 2>&1" 和 "ls 2>&1 >foo" 的區別

ls >foo 2>&1

ls 2>&1 >foo

有什麼區別?

Bash執行的全部步驟還記得嗎?再來複習一下
1. 把 word和operator 解析成 命令和其他組件
2. 移除掉 某些word的 特殊含義
3. 執行expansion
4. 執行 輸入和輸出 重定向
5. 執行命令
6. 等待命令返回(異步命令時,直接返回0)
也就是說,總是先執行 輸入和輸出 重定向,然後再執行命令的

此外,1 就是 FD1;&1 代表 FD1實際指向的 文件

執行 重定向時,按着從左到右-->的順序執行

 

>foo 2>&1 意思是:
stdout 指向 foo文件
stderr 指向 stdout(也就是FD1)當前所指向的文件,也就是 foo文件
最終:stdout和stderr 都指向了 foo文件

2>&1 >foo意思是:
stderr 指向 stdout(也就是FD1)當前所指向的文件,也就是 terminal
stdout 指向 foo文件
最終:只有 stdout指向foo文件

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章