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文件