重定向是 Linux Shell 編程的核心技能,本文系統講解標準流重定向、文件描述符操作、管道與重定向區別、tee 分流、exec 永久重定向、自定義描述符與 /dev/null 黑洞應用。
| FD | 設備文件 | 說明 |
|---|---|---|
| 0 | /dev/stdin | 標準輸入 |
| 1 | /dev/stdout | 標準輸出 |
| 2 | /dev/stderr | 標準錯誤 |
文件描述符是內核為進程維護的打開文件記錄表索引,非負整數。
cmd > file:標準輸出覆蓋寫入cmd >> file:標準輸出追加寫入cmd < file:標準輸入從文件讀取cmd << EOF ... EOF:Here Document,標準輸入從當前腳本讀取直到 EOF管道(|):連接前一命令輸出 → 後一命令輸入,進程間通訊。
重定向(>、<):需文件作媒介建立連接,或直接操作文件描述符。
# 合併 stderr 到 stdout 再寫文件(順序關鍵) cmd > file 2>&1 # 或使用 bash 專用 &> 運算子 cmd &> file
echo 'hello' | tee hello.log
exec 1> somefile # 後續所有標準輸出導向文件 exec 3> somefile # 開啟自定義 FD 3 echo "test" >&3 # 寫入 FD 3 exec 3>&- # 關閉 FD 3
cmd > /dev/null 2>&1 # 完全屏蔽所有輸出
ls -Al /dev/fd/
精通文件描述符操作,是編寫健壯 Shell 腳本、排查疑難雜症的關鍵能力。