錯誤重定向下面發生了什麼事?

錯誤重定向下面發生了什麼事?

在閱讀有關 linux 的內容時,我得到了以下資訊:

由於 stderr 與 stdout 不同,因此在上例中的終端機視窗上仍會看到錯誤訊息。

如果要將 stderr 重新導向到單獨的文件,請使用 stderr 的文件描述符編號 (2)、大於號 (>),後面接著要儲存執行命令寫入 stderr 的所有內容的檔案名稱:

$ do_something 2> error-file

可以使用特殊的速記符號將寫入檔案描述符 2 (stderr) 的任何內容放在與檔案描述符 1 (stdout) 相同的位置:2>&1

$ do_something > all-output-file 2>&1

bash 允許使用更簡單的語法來實現上述內容:

$ do_something >& all-output-file

do_something是一些命令。我真的不明白上面提到的所有 3 個命令下面發生了什麼。我知道&用於使進程成為後台進程,但我不明白其中的邏輯。我是這個口味的新手,有人可以解釋一下嗎?

答案1

您的困惑可能是因為>&與 完全不同&

>&<&用於重定向以指向檔案描述符 (fd)。上述情況重定向到1和2,分別是stdout和stderr。

>意思是“重定向標準輸出”

2>意思是“重定向 fd 2 (stderr)”

>&2意思是「將 stdout 重新導向到 fd 2 (stderr)」。請注意這與>2「將標準輸出重定向到名為」的檔案有何不同2——這就是為什麼它&很重要。它表明接下來的內容將是一個 fd,而不是一個檔名。

當然,正如您所指出的,如果 a&本身沒有重定向符號,那麼它意味著完全不同的東西 - “立即返回,在後台運行前面的命令。”

相關內容