Linux Shell 重新導向: 將標準錯誤(stderr)輸出到螢幕和檔案
開發的時候曾經遇到一個情況,需要在 shell 執行程式時將 stderr 導向 console,但是不能顯示stdout 的訊息,且必須同時 stderr 和 stdout 記錄到 log 檔案。 文件描述符 (file descriptor) 在 UNIX/Linux 系統中,是使用非負整數(0, 1, 2, …)來表示文件描述符(file descriptor, fd),用於標示系統中打開的文件和資源。 系統預設打開 0 (stdin), 1 (stdout), 2 (stderr),也是我們平常常用到的描述符。 接下來會將需求實作出來,並舉幾個例子以及需要注意的地方: 藉由ls一個不存在的檔案來測試,並將 stderr 訊息導向 error.log,我們cat檔案可以看到錯誤訊息:ls: cannot access foo.txt: No such file or directory。 ls foo.txt 2>error.log 將 stderr 導向 stdout,指令中 &(ampersand)符號是告訴shell我們把 fd 2 導向 fd 1 這個fd而不是一個檔案名稱。 在linux下,一切皆檔案,所以系統背後所做的事情是將 fd 1 複製給 fd 2。 ls foo.txt 2>&1 以下的指令先將 stdout 導向 error....