Portability
將輸出發送到 /dev/stderr vs. >&2
在腳本中,錯誤通常用 發送到文件描述符 2
&2
,即:echo "error" >&2
有時
/dev/stderr
改為使用:echo "error" > /dev/stderr
看著
/dev/stderr
,我發現它只是指向 的符號連結/proc/self/fd/2
,而後者又是指向/dev/pts/5
(在我目前的終端上)的符號連結。似乎有點過於復雜。這背後有什麼邏輯嗎?
是使用
/dev/stderr
和&2
等價的嗎?其中任何一個比另一個更受歡迎嗎?
特殊設備
/dev/stderr
是系統特定的,而文件描述符2
(不是特殊設備/proc/self/fd/2
)是可移植的。如果你想編寫不可移植的程式碼,那些特殊的設備是一個很好的起點。有幾個系統
/dev/stderr
:Linux,當然,和OSX。但是 OSX 沒有/proc
文件系統,它/dev/stderr
是指向/dev/fd/2
.進一步閱讀: